Java - Чтение файла чанками? - PullRequest
2 голосов
/ 06 марта 2012

Я знаю, как читать файл байтами, но не могу найти пример, как читать его кусками байтов.У меня есть байтовый массив, и я хочу прочитать файл размером 512 байт и отправить его через сокет.

Я пытался прочитать общее количество байт файла и затем вычесть 512 байт, пока не получил чанк, который был меньшечем 512 байт и сигнализировали EOF и конец передачи.

Я пытаюсь реализовать TFTP, где данные отправляются в 512 байт.

В любом случае, был бы благодарен за пример.

Ответы [ 3 ]

6 голосов
/ 06 марта 2012

Можно использовать соответствующий метод read() из входного потока, например FileInputStream поддерживает read(byte[]) для чтения фрагмента байтов.

что-то вроде: вы можете захотеть обернуть входной поток в BufferedInputStream, если вы хотите гарантировать 512-байтовые блоки (конструктор принимает аргумент размера блока).

byte[] buffer = new byte[512];
FileInputStream in = new FileInputStream("some_file");
int rc = in.read(buffer);
while(rc != -1)
{
  // rc should contain the number of bytes read in this operation.
  // do stuff...

  // next read
  rc = in.read(buffer); 
}
5 голосов
/ 06 марта 2012

Вы ... читаете 512 байт за раз.

char[] myBuffer = new char[512];
int bytesRead = 0;
BufferedReader in = new BufferedReader(new FileReader("foo.txt"));
while ((bytesRead = in.read(myBuffer,0,512)) != -1)
{
    ...
}
0 голосов
/ 06 марта 2012

Используя InputStream, вы можете читать в массиве заданного размера и ограничивать чтение до этого размера.

Читайте здесь: http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

...