Сохраняет ли Java позицию чтения в InputStream? - PullRequest
0 голосов
/ 04 мая 2011

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

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

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

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

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

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

255
0
12
2 голосов
/ 04 мая 2011

Вы просто отразите решение @ 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 делает запись длины имени файла избыточной. Кроме того, вам не нужно записывать количество файлов, если вы не собираетесь ничего писать после этой информации.

2 голосов
/ 04 мая 2011

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

...