为什么字符流读取整数?

时间:2012-05-04 17:36:14

标签: java

Oracle Java Tutorial中给出的示例中,他们试图将字符读作整数......

为什么以及如何运作?

try {
        inputStream = new FileReader("xanadu.txt");
        outputStream = new FileWriter("characteroutput.txt");

      int c;
      while ((c = inputStream.read()) != -1) {
            outputStream.write(c);
        }

5 个答案:

答案 0 :(得分:4)

如果您阅读了char,则没有可用于文件末尾的值。

通过使用更大的类型int,它可能包含所有可能的字符和另一个符号,这意味着文件结束。

答案 1 :(得分:0)

这是因为字符是整数。每个角色都有一个等效的字符。

答案 2 :(得分:0)

基本上charint。请尝试以下方法:

char c = 'c';
int i = c;

这不会导致编译错误。

答案 3 :(得分:0)

在java的幕后,char只是一个16位无符号值。 int是32位无符号值。

charsints的子集,其值在ASCII表上有意义。

由于这种关系,语法很方便允许两种类型轻松转换为另一种类型。

答案 4 :(得分:0)

好的,如果您阅读Reader / Writer的文档,可以看到以下说明:

作家类 - 写方法

  

写一个字符。要写入的字符包含在内   在给定整数值的16个低位中; 16   高位被忽略。

代码就是:

public void write(int c) throws IOException {
    synchronized (lock) {
        if (writeBuffer == null){
            writeBuffer = new char[writeBufferSize];
        }
        writeBuffer[0] = (char) c;
        write(writeBuffer, 0, 1);
    }
}

因此,在Writer的情况下,据我所知,这可以使用char数据类型完成。

另一方面,Readerread方法有责任返回一个字符或流指示符的结尾。

文档说:

读者类阅读方法

  

字符读取,为0到65535范围内的整数   如果已到达流的末尾,则返回-1。

因此,需要一个大于char的数据类型,在这种情况下使用int。

它实现如下:

public int read() throws IOException {
    char cb[] = new char[1];
    if (read(cb, 0, 1) == -1)
        return -1;
    else
        return cb[0];
}

因此,第二种情况证明使用更大的数据类型是合理的。

他们在两个类中使用int的原因可能只是一致性。