将图像从android发送到java app串行错误-javax.imageio.IIOException:Bogus Huffman表定义

时间:2012-09-03 10:18:10

标签: java android image bytearray huffman-code

我需要将图像从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代码也不提供图像

2 个答案:

答案 0 :(得分:0)

错误意味着图像文件无法读取,因为格式错误。这是一些字节丢失或错误或位置不正确,因此文件无法解码。我的rf传输没有像tcp / ip这样的协议,因此一些字节由于通信信道错误而丢失。因此错误。

答案 1 :(得分:0)

您不需要仅使用ImageIO来复制文件。只需读取和写入字节。

您的代码还有其他问题:

  1. 您假设read(byte [])填充缓冲区。它没有。检查Javadoc。

  2. 您还假设文件长度符合int。如果确实如此,那很好。如果没有,你就被软管了。

  3. 您似乎在收到的每个字节上打开和关闭FileOutputStream。这可能效率低下。打开一次,写下所有内容,关闭它。

  4. flush()之前close()是多余的。

  5. 您将图像存储在名为“my_xml”的文件中。如果还没有,这只会引起混淆。

  6. 您甚至不需要该文件。只需直接从输入流加载图像。