我正在浏览java.io.RandomAccessFile
类的oracle API。
在类中有一个名为read()的方法,它从传递给构造函数的文件中读取数据的字节: -
public int read() 抛出IOException
从此文件中读取一个字节的数据。该字节作为一个返回 整数,范围为0到255(0x00-0x0ff)。如果没有,此方法会阻止 输入仍然可用。
虽然RandomAccessFile不是InputStream的子类,但是这个 方法的行为与InputStream.read()完全相同 InputStream的方法。
返回: 数据的下一个字节,如果已到达文件的末尾,则返回-1。抛出: IOException - 如果发生I / O错误。如果已达到文件结尾,则不会抛出。
我很困惑,这是否意味着它从传递给构造函数的文件中读取8位数据并将读取的内容转换为int。
有什么建议吗?
答案 0 :(得分:5)
究竟是什么令你感到困惑?
是的,它读取一个字节的数据,即8位,并将其作为包含范围0..255中的整数值返回。因此,如果有问题的文件恰好是文本文件,并且第一个字符是大写字母'A',read()
将返回65。
返回int
而不是byte
,以便它可以将整个范围0..255作为正数返回,并且仍然可以使用-1作为end-of的标记值-file(虽然可以说这是一个更好的方法)。
答案 1 :(得分:1)
Java没有无符号类型。通常被解释为无符号的字节是[0..255]范围内的整数。 read()
也使用-1表示错误。所以你需要一个至少有257个不同值的类型。 Java int
类型是32位有符号整数。所以文档说它传递的是字节读取的8位无符号值或错误指示符,并且它以32位有符号返回类型作为容器传递。