我试图了解任何面向字节的流(比如 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 值。为什么?