Ошибка при последовательной отправке изображения из Android в приложение Java -javax.imageio.IIOException: определение таблицы Bogus Huffman

Мне нужно отправить изображение из приложения 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 работает нормально, потому что текстовый файл отправляется отлично. Пожалуйста, помогите. Даже без кода ImageIo изображение не выдает даже после изменения расширения в jpeg

2 ответа

Решение

Ошибка означает, что файл изображения не может быть прочитан из-за неправильного формата. Это означает, что некоторые байты отсутствуют или неправильны или находятся в неправильном положении и, следовательно, файл не может быть декодирован. Моя передача RF не имеет протоколов, таких как tcp/ip, поэтому некоторые байты теряются из-за ошибки в канале связи и, следовательно, ошибки.

Вам не нужно использовать ImageIO только для копирования файла. Просто читай и пиши байты.

У вашего кода есть другие проблемы:

  1. Вы предполагаете, что read(byte[]) заполняет буфер. Это не так. Проверьте Javadoc.

  2. Вы также предполагаете, что длина файла вписывается в int, Если это так, хорошо. Если этого не произойдет, вы находитесь в шланге.

  3. Вы, кажется, открываете и закрываете FileOutputStream на каждый полученный байт. Это не может быть более неэффективным. Откройте один раз, напишите все, закройте.

  4. flush() до close() избыточно

  5. Вы храните изображение в файле с именем "my_xml". Это только приведет к путанице, если это еще не произошло.

  6. Вам даже не нужен файл. Просто загрузите изображение прямо из входного потока.

Другие вопросы по тегам