2012-09-03 3 views
2

Java app으로 이미지를 보내야합니다. 기본적으로, 나는 이미지에서 byte 배열을 전송하는 rf 모듈에 보내야한다. 다른 rf 모듈은 바이트 배열을 받아서 이미지를 만들어야하는 java app에 보낸다.이미지를 안드로이드에서 자바 응용 프로그램으로 연속적으로 전송하는 중 오류가 발생했습니다. -javax.imageio.IIOException : 허위 허프만 테이블 정의

안드로이드 코드 :

FileInputStream fis = new FileInputStream(myFile); 
    byte[] b=new byte[(int)myFile.length()];   
    fis.read(b);server.send(b); 

자바 코드 :

FileOutputStream fwrite = new FileOutputStream(new File("my_xml"),true); 
           fwrite.write(bb);//bb is a byte from rf using input stream as soon as a byte comes it is read to file. This is necessary for some other reasons 
           fwrite.flush(); 
           fwrite.close(); 

전체 파일 점점 후 :

FileInputStream fir=new FileInputStream("my_xml"); 
     final BufferedImage bufferedImage = ImageIO.read(fir); 
     ImageIO.write(bufferedImage, "bmp", new File("image.bmp")); 
     fir.close(); 

을 나는 오류 javax.imageio.IIOException 무엇입니까 : 가짜 허프만 테이블 정의를 텍스트 파일이 완벽하게 전송되기 때문에 rf가 잘 작동합니다. p.I 이미지가없는 경우에도 코드가 JPEG로 변경된 후에도 이미지를 제공하지 않음

+0

무엇이이 _rf_ 언급 했습니까? – Ridcully

답변

0

오류는 형식이 잘못 되었기 때문에 이미지 파일을 읽을 수 없음을 의미합니다. 일부 바이트가 누락되었거나 잘못되었거나 올바른 위치에서 벗어났습니다. 따라서 파일을 디코딩 할 수 없습니다. 내 rf 전송은 tcp/ip와 같은 프로토콜을 가지고 있지 않으므로 통신 채널의 오류로 인해 일부 바이트가 손실되어 오류가 발생합니다.

0

파일을 복사하기 위해 ImageIO를 사용할 필요는 없습니다. 바이트를 읽고 쓰십시오.

코드는 다른 문제를 가진다 :

  1. 그 판독 (바이트 [])로 가정되는 버퍼를 채운다. 그렇지 않습니다. Javadoc을 확인하십시오.

  2. 또한 파일 길이가 int에 맞다고 가정합니다. 만약 그렇다면, 좋아. 그렇지 않으면, 당신은 호스를합니다.

  3. 수신 된 모든 바이트에 FileOutputStream 개폐로 표시됩니다. 이것은 더 비효율적 일 수 없다. 한 번 열어 모든 것을 쓰고 닫으십시오.

  4. flush()close()이 중복되기 전에.

  5. 'my_xml'이라는 파일에 이미지를 저장하고 있습니다. 이것은 아직 혼란을 야기 할뿐입니다.

  6. 파일이 필요하지 않습니다. 입력 스트림에서 직접 이미지를로드하면됩니다.