2

我正在通过 oracle APIjava.io.RandomAccessFile上课。

类中有一个名为 read() 的方法,它从传递给构造函数的文件中读取数据字节:-

public int read() 抛出 IOException

从此文件中读取一个字节的数据。该字节以 0 到 255 (0x00-0x0ff) 范围内的整数形式返回。如果还没有输入可用,则此方法会阻塞。

尽管 RandomAccessFile 不是 InputStream 的子类,但此方法的行为方式与 InputStream 的 InputStream.read() 方法完全相同。

返回: 数据的下一个字节,如果已到达文件末尾,则返回 -1。抛出: IOException - 如果发生 I/O 错误。如果已到达文件结尾,则不抛出。

我很困惑,是不是说它从传递给构造函数的文件中读取8位数据并将读取的内容转换为int。

有什么建议么?

4

2 回答 2

5

究竟是什么让你感到困惑?

是的,它读取一个字节的数据,即 8 位,并将其作为包含范围 0..255 的整数值返回。因此,如果有问题的文件恰好是文本文件,并且第一个字符是大写字母“A”,read()则将返回 65。

它返回 anint而不是 abyte以便它可以将整个范围 0..255 作为正数返回,并且仍然有 -1 可用作文件结尾的标记值(尽管可以说例外是更好的方法要做到这一点)。

于 2012-11-07T19:13:27.423 回答
1

Java 没有无符号类型。一个字节,当通常被解释为无符号时,是一个在 [0..255] 范围内的整数。read()还使用 -1 表示错误。所以你需要一个至少有 257 个不同值的类型。Javaint类型是一个 32 位有符号整数。所以文档说它正在传递字节读取的 8 位无符号值或错误指示符,并将 32 位有符号返回类型作为容器传递。

于 2012-11-07T19:16:07.030 回答