2

我需要将图像从 android 应用程序发送到 java 应用程序。基本上,我需要图像中的一个字节数组发送到传输的 rf 模块。另一个 rf 模块接收字节数组并将其发送到必须制作图像的 java 应用程序。

安卓代码:

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 table definition The rf 工作正常,因为文本文件正在完美发送。请帮助。即使没有 ImageIo 代码即使在将扩展名更改为 jpeg 后也不会给出图像

4

2 回答 2

0

该错误表示由于格式错误而无法读取图像文件。即某些字节丢失或错误或位置不正确,因此无法解码文件。我的 rf 传输没有像 tcp/ip 这样的协议,因此由于通信通道中的错误以及因此错误而丢失了一些字节。

于 2012-09-11T08:20:27.327 回答
0

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

您的代码还有其他问题:

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

  2. 您还假设文件长度适合int. 如果是这样,那很好。如果没有,那你就完蛋了。

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

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

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

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

于 2012-09-11T08:39:29.910 回答