#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)