Ошибка при последовательной отправке изображения из 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 только для копирования файла. Просто читай и пиши байты.
У вашего кода есть другие проблемы:
Вы предполагаете, что read(byte[]) заполняет буфер. Это не так. Проверьте Javadoc.
Вы также предполагаете, что длина файла вписывается в
int
, Если это так, хорошо. Если этого не произойдет, вы находитесь в шланге.Вы, кажется, открываете и закрываете
FileOutputStream
на каждый полученный байт. Это не может быть более неэффективным. Откройте один раз, напишите все, закройте.flush()
доclose()
избыточноВы храните изображение в файле с именем "my_xml". Это только приведет к путанице, если это еще не произошло.
Вам даже не нужен файл. Просто загрузите изображение прямо из входного потока.