我写了一些代码,逐个字符地从一个文本文件char中读取,然后将其打印到屏幕上,但是结果使我感到困惑,在这里:
这是我编写的代码
import java.io.*;
import java.nio.charset.StandardCharsets;
public class learnIO
{
public static void main(String[] args) throws IOException{
var in = new InputStreamReader(new FileInputStream("test1.txt"), StandardCharsets.UTF_8);
while(in.read() != -1){
System.out.println((char)in.read());
}
}
}
文件的内容和编码方案:
文件test1.txt
test1.txt:ASCII文本
cat test1.txt
你好,世界!
结果是:
e
l
,
w
r
d
一些字符不见了,为什么会这样?
InputStreamReader的读取方法的返回类型为int,它占用4个字节并且char类型为2个字节,因此将int转换为char可以跳过2个字节
参考https://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html