如果我们的文本文件中有一个字符是unicode中的,那么它就不能是2字节的数据吗?但是read()方法一次读取一个字节作为int。因此,如果我们有一个FileInputStream对象fin,并且只调用int x = fin.read()一次,那么如果只读取了一个字节,那么如何将完整的字符返回到System.out.println(x)上呢?( fin.read()不在while循环或任何东西中,它只被调用一次)
发布于 2016-07-13 06:06:30
问得好!您是对的,在Java字符中总是有两个字节,但在其他地方(例如,在文件的内容中)则不是这样。
由于Unicode是一种规范,而不是一种编码,所以文件不会被编码。编码将Unicode规范映射到特定的字节序列,而且并非所有这样的编码都使用两字节字符。Java chars是乌特夫-16,它总是两个字节宽,但许多文件存储为UTF-8,宽度可变;
然而,更重要的是,InputStream被设计为读取二进制数据,而不是字符,二进制数据(本质上)总是一次读取一个字节。如果要读取文本,则可以将流包装在Reader中(最好明确指定要使用的编码),以便将二进制数据转换为文本。在内部,它将调用read()一次或多次,以便根据编码从字节序列正确地构造字符。
https://stackoverflow.com/questions/38343729
复制相似问题