java—正在读取二进制文件,fileinputstream返回0

9udxz4iz  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(426)

我有以下代码:

File file=new File("src/com/yoznacks/main/stuff.txt");
FileInputStream foo=new FileInputStream(file);
int a;
while((a=foo.read())!=-1){
    System.out.print((char)a);
}

我的档案如下:
aaaaa级
但是输出是
a a a a a
为什么?

sr4lhrrt

sr4lhrrt1#

您正在读取字节。如果文件的文本是用utf-16le编码的,那么字节将是0x61 0x00 0x61 0x00 0x61 0x00 0x61 0x00 0x61 0x00,其中0x61 as char是“a”。
为了读取文本而不是字节,java使用reader而不是inputstream,同时指定字节的编码(字符集)。

try (InputStream in = getClass().getResourceAsStream("/com/yoznacks/main/stuff.txt");
        InputStreamReader foo = new InputStreamReader(in, StandardCharsets.UTF_16LE)) {
    int a;
    while ((a = foo.read()) !=-1 ) {
        System.out.print((char)a);
    }
    System.out.println(); // Output, flush all.
} // foo and in are closed.
``` `InputStreamReader` 获取一个二进制输入流,给定一个字节字符集生成unicode文本, `char` .
如果文件是应用程序的一部分(如应用程序jar中的zipped),那么它就是一个资源,可以使用 `getResource(AsStream)` .

相关问题