请解释Byte流和字符流是什么。这究竟是什么意思? Microsoft Word文档是面向字节还是面向字符?
谢谢
流是一种顺序访问文件的方式。字节流逐字节地访问文件。字节流适用于任何类型的文件,但不太适合文本文件。例如,如果文件使用的是unicode编码,并且字符用两个字节表示,则字节流将单独处理这些字节,您需要自己进行转换。
字符流将逐个字符地读取文件。需要为字符流提供文件的编码才能正常工作。
虽然Microsoft Word文档包含文本,但无法使用字符流(它不是文本文件)访问它。您需要使用字节流来访问它。
字节流:
从oracle文档页面关于byte streams:
程序使用字节流来执行8位字节的输入和输出。所有字节流类都来自
InputStream
和OutputStream
。
何时使用:
字节流应仅用于最原始的I / O.
何时不使用:
您不应使用字节流来读取字符流
例如阅读文本文件
角色流:
从oracle文档页面关于character streams:
Java平台使用Unicode约定存储字符值。字符流I / O自动将此内部格式转换为本地字符集。
所有字符流类都来自Reader
和Writer
。
字符流通常是字节流的“包装器”。字符流使用字节流来执行物理I / O,而字符流处理字符和字节之间的转换。
有两个通用的字节到字符“桥”流:InputStreamReader
和OutputStreamWriter
。
何时使用:
从Socket
或File
中读取字符流
综上所述:
字节流一次读取和写入一个字节。在处理更复杂的数据时,我们必须避免使用字节流。
应使用字符流和其他可用流来处理复杂数据。
1.Character oriented与数据类型相关联。只能读取字符串类型或字符类型,而面向字节不依赖于任何数据类型,可以读取任何数据类型的数据(字符串除外),只需指定它即可。
2.字符定向逐字符读取,而字节定向逐字节读取
3.面向字符的流使用字符编码方案(UNICODE),而面向字节的流不使用任何编码方案
面向字符的流也称为读写器流。面向字节的流称为数据流 - 数据输入流和数据输出流
阅读this。它告诉你字节和字符之间的区别(以及其他有用的东西的负载)
字符流将逐个字符地读取文件。字符流能够读取16位字符(字节流读取8位字符)。字符流能够将8位数据隐式转换为16位数据,反之亦然。字符流可以支持所有类型的字符集ASCII,Unicode,UTF-8,UTF-16等。但字节流仅适用于ASCII字符集.Java平台使用Unicode约定存储字符值。字符流I / O自动将此内部格式转换为本地字符集。
除非使用二进制数据(如图像和声音文件),否则应使用读取器和写入器来读取和写入包含字符流的信息。