为什么我一次只能使用 ObjectInputStream 读取 1024 个字节?
我编写了以下代码,该代码将4000字节的0s写入文件。然后,我一次以1000字节的块读取同一文件。test.txt
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 个字节标记处暂停。
在检查十六进制的输出文件时,我注意到有一个相距5个非零字节1029字节的序列,尽管我只向文件写入了0s。这是我的十六进制编辑器的输出。(太长了,不适合问题。test.txt
7A 00 00 04 00
所以我的问题是:为什么当我完全写0s时,这五个字节会出现在我的文件中?这 5 个字节是否与每 1024 个字节发生的暂停有关?为什么这是必要的?