所以我每次调用方法read()时都会有一个从文件中读取8位的类。所有字符的对应十进制数都在ASCII表中。 现在我遇到了一个字符'É',其ASCII码二进制代码是11001001.当我打电话时结果是正确的
System.out.println(Integer.toBinaryString('É'));
但是,当我以二进制格式打开文件时,实际位是11000011 10001001 00001010.我知道00001010是换行符。但是11000011和10001001肯定与11001001不匹配。我更改了文件并使其仅包含'a',现在该文件仅包含01100001,这是正确的。字符编码是UTF-8。这是我将字符及其频率放入地图的代码
while ((bit = readInputStream()) != -1) {
if (!bitOccurrence.containsKey(bit))
bitOccurrence.put(bit, 1);
else
bitOccurrence.put(bit, bitOccurrence.get(bit) + 1);
}
这是私有的readInputStream方法
private int readInputStream() throws IOException {
InputStreamReader r = new InputStreamReader(i); // i is the InputStream
return r.read();
}
所以我的问题是这个问题是如何发生的,如果我每次只能读8位,这个问题的解决方法是什么?