【发布时间】:2011-03-02 03:16:27
【问题描述】:
请解释什么是字节流和字符流。这些到底是什么意思? Microsoft Word 文档是面向字节还是面向字符?
谢谢
【问题讨论】:
标签: java filestream iostream
请解释什么是字节流和字符流。这些到底是什么意思? Microsoft Word 文档是面向字节还是面向字符?
谢谢
【问题讨论】:
标签: java filestream iostream
流是一种顺序访问文件的方式。字节流逐字节访问文件。字节流适用于任何类型的文件,但不太适合文本文件。例如,如果文件使用 unicode 编码,一个字符用两个字节表示,字节流将分别处理这些,您需要自己进行转换。
字符流将逐个字符地读取文件。字符流需要被赋予文件的编码才能正常工作。
虽然 Microsoft Word 文档包含文本,但无法使用字符流访问它(它不是文本文件)。您需要使用字节流来访问它。
【讨论】:
ISO-8859-1 和UTF-8。
字节流:
来自关于byte streams的oracle文档页面:
程序使用字节流来执行 8 位字节的输入和输出。所有字节流类都来自
InputStream和OutputStream。
何时使用:
字节流应该只用于最原始的 I/O
何时不使用:
你不应该使用字节流来读取字符流
例如读取文本文件
字符流:
来自关于character streams的oracle文档页面:
Java 平台使用 Unicode 约定存储字符值。字符流 I/O 自动将此内部格式与本地字符集进行转换。
所有字符流类都是Reader和Writer的后代。
字符流通常是字节流的“包装器”。字符流使用字节流执行物理 I/O,而字符流处理字符和字节之间的转换。
有两个通用的字节到字符“桥”流:InputStreamReader 和 OutputStreamWriter。
何时使用:
从Socket 或File 的字符中读取字符流
总结:
字节流一次读取和写入一个字节。在处理更复杂的数据时,我们必须避免使用字节流。
字符流和其他可用的流应该用于处理复杂的数据。
【讨论】:
1.面向字符与数据类型相关联。只能读取字符串类型或字符类型,而面向字节不绑定任何数据类型,可以读取任何数据类型的数据(字符串除外),只需指定即可。
2.面向字符是逐个字符读取,面向字节是逐字节读取
3.面向字符的流使用字符编码方案(UNICODE),而面向字节的流不使用任何编码方案
4.面向字符的流也称为读取器和写入器流 面向字节的流称为数据流——数据输入流和数据输出流
【讨论】:
阅读this。它告诉您字节和字符之间的区别(以及许多其他有用的东西)
【讨论】:
字符流将逐个字符地读取文件。字符流能够读取 16 位字符(字节流读取 8 位字符)。字符流能够将 8 位数据隐式转换为 16 位数据,反之亦然。字符流可以支持所有类型的字符集 ASCII、Unicode、UTF-8、UTF-16 等。但字节流只适用于 ASCII 字符集。Java 平台使用 Unicode 约定存储字符值。字符流 I/O 自动将此内部格式与本地字符集进行转换。
除非您正在处理二进制数据,例如图像和声音文件,否则您应该使用读取器和写入器通过字符流读取和写入信息。
【讨论】: