Сохраняет ли Java позицию чтения во входном потоке?

#java #byte #offset

#java #байт #смещение

Вопрос:

Я нахожусь в процессе чтения данных, Java «сохраняет» прочитанные байты или мне нужно использовать смещение?

Комментарии:

1. О, ну вот и раз! После того, как вы опубликовали свой последний вопрос, вы могли бы прочитать документацию и попробовать это. Вы достаточно быстро увидите, что после чтения некоторых данных позиция становится продвинутой. Возможно, вы захотите проверить руководство по вводу-выводу .

Ответ №1:

FileInputStream действительно сохраняет вашу позицию.

Если у вас есть файл с 3 байтами, 0xff 0x00 0x0c вызывая:

 System.out.println(fis.read());
System.out.println(fis.read());
System.out.println(fis.read());
  

Будет ли вывод:

 255
0
12
  

Ответ №2:

Вы просто должны отразить решение @ WhiteFang для записи.

 FileInputStream fis = new FileInputStream(files[0]);
DataInputStream dis = new DataInputStream(new BufferedInputStream(fis));
int numFiles = dis.readInt();
int numBytesInName = dis.readInt();
String filename = dis.readUTF();
long numBytesInFile = dis.readLong();
// loop to read bytes into a byte[]
  

Кстати, использование writeUTF / readUTF делает запись длины имени файла избыточной. Кроме того, вам не нужно записывать количество файлов, если вы не собираетесь ничего записывать после этой информации.

Ответ №3:

Как насчет пометки вашей позицииhttp://download.oracle.com/javase/6/docs/api/java/io/InputStream.html#mark (int)