首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么是字符流?

为什么是字符流?
EN

Stack Overflow用户
提问于 2011-03-18 11:45:43
回答 3查看 1.2K关注 0票数 0

我理解Java字符流封装字节流,以便根据系统默认或其他特定定义的字符集来解释底层字节流。

我的系统默认字符集是UTF-8。

如果我使用FileReader读取文本文件,一切看起来都正常,因为默认的char集用于解释底层InputStreamReader中的字节。如果我显式地定义一个InputStreamReader来将UTF-8编码的文本文件读入为UTF-16,那么显然一切看起来都很奇怪。使用像FileInputStream这样的字节流并将其输出重定向到System.out,一切看起来都很好。

所以,我的问题是

  • 为什么使用字符流很有用?
  • 为什么要使用字符流而不是直接使用字节流?
  • 什么时候定义特定的字符集?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-18 11:51:37

处理字符串的代码应该只从文本的角度“思考”--例如,逐行读取输入源,您不想关心该源的性质。

但是,存储通常是面向字节的,因此您需要在源的面向字节视图(由InputStream封装)和面向字符的源视图(由Reader封装)之间创建转换。

因此,在输入源中计算文本行数的方法应该采用Reader参数。如果您想在两个文件中计数文本行,其中一个以UTF-8编码,一个以UTF-16编码,您将为每个文件创建一个InputStreamReader,为每个文件指定适当的编码。

(就我个人而言,我将完全避免FileReader,因为它不允许您指定编码,这使得它毫无用处。)

票数 6
EN

Stack Overflow用户

发布于 2011-03-18 11:49:20

InputStream读取字节,而Reader读取字符。由于字节映射到字符的方式,您需要在创建InputStreamReader时指定字符集(或编码),默认的是平台字符集。

票数 3
EN

Stack Overflow用户

发布于 2011-03-18 11:51:28

当您正在读/写包含可能大于127的字符的文本时,请使用char流。当您读取/写入二进制数据时,请使用字节流。

如果你愿意的话,你可以把文本读成二进制,但是除非你做了很多假设,否则它很少能给你带来很多好处。

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

https://stackoverflow.com/questions/5351510

复制
相关文章

相似问题

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