说一个方法读取一个数据字节是什么意思?

时间:2012-11-07 19:03:31

标签: java api byte java-io

我正在浏览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。

有什么建议吗?

2 个答案:

答案 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位有符号返回类型作为容器传递。