바이트 배열로 코딩 된 이미지를 받으려고합니다.바이트 배열 이미지를 다시 작성하십시오.
그것은 이미지가 너무 큰 경우 잘 작동하지만 난 많은 시간을 입력 스트림을 읽을 때, 선 모든 이미지 바이트를 얻을 :
BufferedImage img = ImageIO.read(new ByteArrayInputStream(finalData));
반환 null
합니다.
여기 내 코드입니다 :
byte[]imgSize = new byte[SIZE_OF_LENGTH_ARRAY];
bis.read(imgSize, 0, SIZE_OF_LENGTH_ARRAY);
ByteBuffer bb = ByteBuffer.wrap(imgSize);
int size = bb.getInt();
System.out.println("Client: size="+size);
byte[] tmpData = new byte[size];
System.out.println("tmpData length = "+tmpData.length);
int readen = bis.read(tmpData, 0, tmpData.length);
System.out.println("readen="+readen);
byte[]finalData = new byte[size];
if(readen == size){
finalData = tmpData;
}
else{
int totalRead = readen;
int j=1;
while(totalRead<size){
System.out.println("-----------append number "+j+"----------");
System.out.println("totalRead="+totalRead);
for(int i=0;i<tmpData.length;i++){
finalData[i]=tmpData[i];
}
tmpData = new byte[size-totalRead];
int tmpRead = bis.read(tmpData, 0, size-totalRead);
System.out.println("tmpRead="+tmpRead);
for(int i=0;i<tmpData.length;i++){
finalData[i+totalRead]=tmpData[i];
}
totalRead+=tmpRead;
j++;
}
System.out.println("totalRead final="+totalRead);
}
BufferedImage img = ImageIO.read(new ByteArrayInputStream(finalData));
그리고 출력 예입니다 : 내가 잘 85,921 바이트를 읽는 동안
---Client: sending mess number 1---
Client: size=31099
tmpData length = 31099
readen=31099
---Client: sending mess number 2---
Client: size=85921
tmpData length = 85921
readen=17520
-----------append number 1----------
totalRead=17520
tmpRead=17520
-----------append number 2----------
totalRead=35040
tmpRead=17520
-----------append number 3----------
totalRead=52560
tmpRead=31408
-----------append number 4----------
totalRead=83968
tmpRead=1953
totalRead final=85921
image null
는 ImageIO.Read
는 널 이미지를 만듭니다. 내가 비스 모르는
그래 그게 정확히 ... 너무 서둘러, 나는 그것을 놓쳤다. 잠시 전에이 반복을 넣으면 매력처럼 작동합니다. 감사합니다. . – minod
여전히 바이트 배열로 데이터를 읽는 이유는 여전히 대답하지 않습니다. 그런 다음 ByteArrayInputStream을 ImageIO.read에 대한 인수로 만듭니다. ImageIO.read에 원본 스트림을 제공하십시오. 그것은 당신을 위해 데이터를 읽을 것입니다. – Kaj