InputStream与CharacterStream的行为

时间:2013-10-07 13:35:42

标签: filereader fileinputstream

我试图理解任何面向字节的流(比如FileInputStream)和任何面向字符的流(比如FileReader)的行为之间的区别。

我经历了以下内容:http://docs.oracle.com/javase/tutorial/essential/io/charstreams.html

第一个程序:

`import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;

public class CopyBytes {     public static void main(String [] args)抛出IOException {

    FileInputStream in = null;
    FileOutputStream out = null;

    try {
        in = new FileInputStream("xanadu.txt");
        out = new FileOutputStream("outagain.txt");
        int c;

        while ((c = in.read()) != -1) {
            out.write(c);
        }
    } finally {
        if (in != null) {
            in.close();
        }
        if (out != null) {
            out.close();
        }
    }
}

} ` 第二个计划:

import java.io.FileReader;

import java.io.FileWriter; import java.io.IOException;

公共类CopyCharacters {     public static void main(String [] args)抛出IOException {

    FileReader inputStream = null;
    FileWriter outputStream = null;

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

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

}

它说: 在CopyCharacters中,int变量在其最后16位中保存一个字符值;在CopyBytes中,int变量在其最后8位中保存一个字节值。

我的问题是:我想检查上面的句子,以便在复制时检查c(程序中定义的整数)的值。现在c的值在连续读取时必须不同,因为在字节流中它逐字节读取,所以有字节值,而在字符流中它逐字符读取,所以有字符ASCII值。但它给出了相同的c值。为什么呢?

1 个答案:

答案 0 :(得分:0)

试图以不同的方式思考,如果我的源文件只有一个字符说'a'。

现在CopyBytes应该在循环至少2次时运行,因为字符需要2个字节。但它只运行一次。

import java.io.FileReader;

import java.io.FileWriter; import java.io.IOException; //在CopyCharacters中,int变量在最后16位中保存一个字符值; //在CopyBytes中,int变量在最后8位保存一个字节值。

公共类CopyCharacters {     public static void main(String [] args)抛出IOException {

    FileReader inputStream = null;
    FileWriter outputStream = null;

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

        int c;
        while ((c = inputStream.read()) != -1) {
            System.out.println("one");
            outputStream.write(c);
        }
    } finally {
        if (inputStream != null) {
            inputStream.close();
        }
        if (outputStream != null) {
            outputStream.close();
        }
    }

}

}

这里只打印一次