Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,每次从文本文件读取8位_Java_File_Inputstream_Binaryfiles_Bit - Fatal编程技术网

在Java中,每次从文本文件读取8位

在Java中,每次从文本文件读取8位,java,file,inputstream,binaryfiles,bit,Java,File,Inputstream,Binaryfiles,Bit,因此,我已经有了一个类,每当我调用read()方法时,它都会从文件中读取8位。所有字符对应的十进制数都在ASCII表中。 现在我遇到了一个字符“É”,它的ASCII码二进制码是11001001。当我打电话时,结果是正确的 System.out.println(Integer.toBinaryString('É')); 但是,当我以二进制格式打开文件时,实际位是11000011000100100001010。我知道00001010是一个换行符。但11000011和10001001肯定与11001

因此,我已经有了一个类,每当我调用read()方法时,它都会从文件中读取8位。所有字符对应的十进制数都在ASCII表中。 现在我遇到了一个字符“É”,它的ASCII码二进制码是11001001。当我打电话时,结果是正确的

System.out.println(Integer.toBinaryString('É'));
但是,当我以二进制格式打开文件时,实际位是11000011000100100001010。我知道00001010是一个换行符。但11000011和10001001肯定与11001001不匹配。我更改了文件,使其仅包含“a”,现在该文件仅包含a的0110001,这是正确的。字符编码是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位,这个问题是如何发生的,解决这个问题的方法是什么?

文本文件的字符编码是什么。您使用哪个工具来编辑它?首先,为什么要使用配置了适当字符编码的读卡器以字节的形式读取文本,而不是以字符的形式读取文本?我相信它是UTF8,我正在vim中编辑它。我将其读取为字节,因为我只提供了一个修改过的InputStream类来读取文件,并且它只有read bits方法。请使用InputStreamReader包装您的InputStream。这确实是UTF8,这是一个经典的X对Y问题。你真正想要实现什么?从流中读取位不能是您的主要目标。而您的代码是?如果您想让我们解释为什么它不能按预期工作,请发布您的代码。我们不是额外的lucif向导。文本文件的字符编码是什么。您使用哪个工具来编辑它?首先,为什么要使用配置了适当字符编码的读卡器以字节的形式读取文本,而不是以字符的形式读取文本?我相信它是UTF8,我正在vim中编辑它。我将其读取为字节,因为我只提供了一个修改过的InputStream类来读取文件,并且它只有read bits方法。请使用InputStreamReader包装您的InputStream。这确实是UTF8,这是一个经典的X对Y问题。你真正想要实现什么?从流中读取位不能是您的主要目标。而您的代码是?如果您想让我们解释为什么它不能按预期工作,请发布您的代码。我们不是特别清醒的巫师。