我需要将图像从Android应用程序发送到java应用程序。基本上,我需要从图像中的一个字节数组发送到发送的rf模块。另一个rf模块接收并将字节数组发送到必须生成图像的java应用程序。
Android代码:
FileInputStream fis = new FileInputStream(myFile);
byte[] b=new byte[(int)myFile.length()];
fis.read(b);server.send(b);
Java代码:
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:Bogus Huffman表定义 rf工作正常,因为文本文件正在完美发送。请帮助。即使在将扩展名更改为jpeg之后,即使没有ImageIo代码也不提供图像
答案 0 :(得分:0)
错误意味着图像文件无法读取,因为格式错误。这是一些字节丢失或错误或位置不正确,因此文件无法解码。我的rf传输没有像tcp / ip这样的协议,因此一些字节由于通信信道错误而丢失。因此错误。
答案 1 :(得分:0)
您不需要仅使用ImageIO来复制文件。只需读取和写入字节。
您的代码还有其他问题:
您假设read(byte [])填充缓冲区。它没有。检查Javadoc。
您还假设文件长度符合int
。如果确实如此,那很好。如果没有,你就被软管了。
您似乎在收到的每个字节上打开和关闭FileOutputStream
。这可能效率低下。打开一次,写下所有内容,关闭它。
flush()
之前close()
是多余的。
您将图像存储在名为“my_xml”的文件中。如果还没有,这只会引起混淆。
您甚至不需要该文件。只需直接从输入流加载图像。