我正在阅读Eckel的书,IO章,并且有以下代码(第667页).
public static void main(String[] args) throws IOException {
try {
DataInputStream in = new DataInputStream(new ByteArrayInputStream(BufferedInputFile.read("src/io/FormattedMemoryInput.java").getBytes()));
while(true) {
System.out.print((char)in.readByte()); // problem line
}
} catch (EOFException ex) {
System.err.println("End of stream");
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码效果很好,但是如果我(char) in.readByte()改为in.readChar()它就会打印出一些亚洲符号?????????????????.为什么这样,为什么它不打印英文ASCII符号?
为什么这样,为什么它不打印英文ASCII符号?
来自DataInput.readChar():
读取两个输入字节并返回一个char值.设a为读取的第一个字节,b为第二个字节.返回的值是:
(char)((a << 8) | (b & 0xff))此方法适用于读取由接口DataOutput的writeChar方法写入的字节.
换句话说,它将您的文件视为UTF-16编码 - 而且几乎肯定不是.
当你想要读取文本数据时,你应该使用一个Reader子类,例如InputStreamReader包裹FileInputStream,指定输入数据的适当编码.