首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果char是2字节,为什么read()每次读取一个字节?

如果char是2字节,为什么read()每次读取一个字节?
EN

Stack Overflow用户
提问于 2016-07-13 06:03:04
回答 2查看 1.9K关注 0票数 1

如果我们的文本文件中有一个字符是unicode中的,那么它就不能是2字节的数据吗?但是read()方法一次读取一个字节作为int。因此,如果我们有一个FileInputStream对象fin,并且只调用int x = fin.read()一次,那么如果只读取了一个字节,那么如何将完整的字符返回到System.out.println(x)上呢?( fin.read()不在while循环或任何东西中,它只被调用一次)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-13 06:06:30

问得好!您是对的,在Java字符中总是有两个字节,但在其他地方(例如,在文件的内容中)则不是这样。

由于Unicode是一种规范,而不是一种编码,所以文件不会被编码。编码将Unicode规范映射到特定的字节序列,而且并非所有这样的编码都使用两字节字符。Java chars是乌特夫-16,它总是两个字节宽,但许多文件存储为UTF-8,宽度可变;

然而,更重要的是,InputStream被设计为读取二进制数据,而不是字符,二进制数据(本质上)总是一次读取一个字节。如果要读取文本,则可以将流包装在Reader中(最好明确指定要使用的编码),以便将二进制数据转换为文本。在内部,它将调用read()一次或多次,以便根据编码从字节序列正确地构造字符。

票数 5
EN

Stack Overflow用户

发布于 2016-07-13 06:06:25

流用于读取字节,而不是字符。如果要读取字符,请使用Reader。阅读器将一次读取一个字符,并处理从字节中解码的字符:取决于字符编码(以及字符本身),一个字符可以用一个字节,两个甚至更多的字节进行编码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38343729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档