Я написал следующий код, который записывает 4000 байтов 0s в файл test.txt
. Затем я читаю один и тот же файл в кусках по 1000 байт за раз.
FileOutputStream output = new FileOutputStream("test.txt");
ObjectOutputStream stream = new ObjectOutputStream(output);
byte[] bytes = new byte[4000];
stream.write(bytes);
stream.close();
FileInputStream input = new FileInputStream("test.txt");
ObjectInputStream s = new ObjectInputStream(input);
byte[] buffer = new byte[1000];
int read = s.read(buffer);
while (read > 0) {
System.out.println("Read " + read);
read = s.read(buffer);
}
s.close();
То, что я ожидаю, - это прочитать 1000 байтов четыре раза.
Read 1000
Read 1000
Read 1000
Read 1000
Однако, что на самом деле происходит, так это то, что я кажусь "приостановленным" (за отсутствием лучшего слова) каждые 1024 байта.
Read 1000
Read 24
Read 1000
Read 24
Read 1000
Read 24
Read 928
Если я попытаюсь прочитать более 1024 байта, тогда я получаю ограничение на 1024 байта. Если я пытаюсь читать менее 1024 байт, мне все равно необходимо приостановить отметку 1024 байта.
После проверки выходного файла test.txt
в шестнадцатеричном формате, я заметил, что существует последовательность из 5 ненулевых байтов 7A 00 00 04 00
1029 байт, несмотря на то, что я написал только 0s в файл. Вот результат из моего шестнадцатеричного редактора. (Будет слишком длинным, чтобы соответствовать вопросу.)
Итак, мой вопрос: почему эти пять байтов появляются в моем файле, когда я написал полностью 0s? Эти 5 байтов имеют какое-то отношение к паузе, которая возникает каждые 1024 байта? Почему это необходимо?