Я пытаюсь прочитать файл .raw, чтобы найти некоторые "поврежденные" изображения. Я пробовал все. Насколько я понимаю, должно работать следующее
public void readFile(){
FileInputStream inFile = new FileInputStream(this.rawFile);
System.out.println(inFile.read());
}
но печатается только один байт. Мне нужно прочитать их все и найти байты 255 (означает начало нового изображения) и сохранить байты от первых 255 до следующих 255 (следующее изображение) в .jpg
Извините, если я не ясно здесь.
Пожалуйста, задавайте любые вопросы, которые могут у вас возникнуть.
Ответ 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 ...
}
}