0

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

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

第一个程序:

`导入java.io.FileInputStream; 导入 java.io.FileOutputStream;导入 java.io.IOException;

公共类 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;

导入 java.io.FileWriter;导入 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 值。为什么?

4

1 回答 1

0

尝试以不同的方式思考它,如果我的源文件只有一个字符,请说“a”。

现在 CopyBytes 应该在 while 循环中运行至少 2 次,因为字符占用 2 个字节。但它只运行一次。

import java.io.FileReader;

导入 java.io.FileWriter;导入 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();
        }
    }

}

}

这里一个只打印一次

于 2013-10-07T13:41:11.583 回答