Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Чтение байтов из файла с помощью fileinputstream для поиска потерянных изображений

Автор вопроса: user1304317Ответов: 1

Я пытаюсь прочитать файл .raw, чтобы найти некоторые "поврежденные" изображения. Я пробовал все. Насколько я понимаю, должно работать следующее

public void readFile(){
FileInputStream inFile = new FileInputStream(this.rawFile);
System.out.println(inFile.read());
}

но печатается только один байт. Мне нужно прочитать их все и найти байты 255 (означает начало нового изображения) и сохранить байты от первых 255 до следующих 255 (следующее изображение) в .jpg

Извините, если я не ясно здесь.

Пожалуйста, задавайте любые вопросы, которые могут у вас возникнуть.

  • read() фактически возвращает int ControlAltDel 16.04.2012
  • @vikiiii: вы не правы - read() возвращает прочитанный байт (преобразованный в целое число) или -1 для EOF. Greg Kopff 16.04.2012

javaparsingiobyte

Ответы

Ответ 1 · рейтинг 1 · Greg Kopff

Вы вызываете read() a> метод в FileInputStream. Этот метод считывает один байт и возвращает его. Из Javadoc :

Считывает байт данных из этого входного потока. Этот метод блокируется, если вход еще не доступен.

У вас есть пара вариантов...

Вы можете продолжать читать по одному байту за раз, и в этом случае вам понадобится цикл:

int read;

while ((read = inFile.read()) != -1)
{
  // process the byte
}

В качестве альтернативы вы можете прочитать фрагмент файла в буфер и выполнить итерацию по буферу, используя read(byte[],int,int).

Если файл не слишком большой, вы можете прочитать его в память за один раз.

final byte[] buff = new byte[this.rawFile.length()];    // size the array
inFile.read(buff);                                      // read the whole file in
inFile.close();                                         // close the file descriptor

for (int i = 0; i < buff.length; i++)                   // search the in-memory buffer
{
  if (buff[i] == 0xFF)
  {
    // found marker byte ...
  }
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы