【发布时间】:2020-11-07 13:13:13
【问题描述】:
当没有更多字节要读取时,为什么我会得到 32 位 1?当我使用 FileInput 流时。 我不应该得到 EOFException (就像我们在 Object 或 Data 流中得到)?
我将演示使用简单的读/写程序。
try {
FileWriter fileWriter = new FileWriter("a.txt");
fileWriter.write('A'); //writes 'A' to file (a.txt)
fileWriter.close();
}catch (IOException ioe){
ioe.printStackTrace();
}
try {
FileInputStream fileInputStream = new FileInputStream("a.txt");
System.out.println(Integer.toBinaryString(fileInputStream.read()));//1000001
System.out.println(Integer.toBinaryString(fileInputStream.read()));//11111111111111111111111111111111
System.out.println(Integer.toBinaryString(fileInputStream.read()));//11111111111111111111111111111111
System.out.println(Integer.toBinaryString(fileInputStream.read()));//11111111111111111111111111111111
}catch (IOException ioe){
ioe.printStackTrace();
}
所以在每个 read() 中我得到 4 个字节的 1。那是无限的.. 我以为我只会得到字节值,因为 65 在二进制中是 1000001。所以总共1个字节。 这些其他字节从何而来?它们真的存在吗?
【问题讨论】:
-
11111111111111111111111111111111是-1我可能认为它是 EOF 标志的二进制表示 -
我刚刚从二进制到十进制计算了第 32 位。结果是 4294967295。然后我还从有符号 2 的补码中得到了十进制:-1。这是什么意思?
-
较大的数字是无符号整数,另一个是Java使用格式的有符号整数。
标签: java io binary ascii filestream