2010-06-10 77 views
35

请解释字节流和字符流文件。这些意味着什么,微软的Word文档是面向字节还是字符?字节流和字符流

谢谢

+7

亲爱的downvoter - 请鼓励作者提供更好的问题,留下一个不**为什么**你决定downvote(个人我没有看到一个强有力的理由) – 2010-06-10 11:57:16

+2

打开记事本中的MS Word文档。你看到了什么?垃圾就像当你在记事本中打开一个'exe'一样?它会然后是二进制数据:) – BalusC 2010-06-10 11:57:18

+0

我投这篇文章,因为我从帖子中看到的是字节流和字符流之间的混淆。使用记事本解释问题是没有意义的。在我看来,傲慢者非常傲慢。 – Paul 2011-09-06 07:22:49

回答

46

流是顺序访问文件的一种方式。一个字节流逐字节地访问该文件。字节流适用于任何类型的文件,但不适用于文本文件。例如,如果文件使用的是Unicode编码,并且字符由两个字节表示,则字节流将分开处理这些字符,您需要自行完成转换。

字符流将逐个字符地读取文件。字符流需要被赋予文件的编码才能正常工作。

尽管Microsoft Word文档包含文本,但无法使用字符流(它不是文本文件)进行访问。您需要使用字节流来访问它。

+0

感谢kgiannakakis, 和.txt文件呢? – JavaUser 2010-06-10 11:58:46

+2

字符流适合读取.txt文件。但正如我所说,你需要知道文本文件的编码。 – kgiannakakis 2010-06-10 12:00:19

+0

我在询问有关.txt文件存在于Windows操作系统中 – JavaUser 2010-06-10 12:04:19

3

阅读this。它告诉你字节和字符之间的区别(以及其他有用的东西的加载)

4

1.面向字符与数据类型绑定。只有字符串类型或字符类型可以通过它读取,而面向字节的不绑定到任何数据类型,任何数据类型的数据都可以被读取(字符串除外),只是必须指定它。

2.Character取向由字符读取字符而面向字节由字节读取字节

3.Character定向流使用字符编码方案(UNICODE),而面向不使用任何编码方案

4字节。面向字符的流也被称为读取器和写入流 面向字节流被称为数据流,数据流的输入和输出的数据流

10

字节流

从Oracle文档页面约byte streams

程序使用字节流来执行的8位字节的输入和输出。所有的字节流类都是从InputStreamOutputStream开始的。

enter image description here

何时使用:

字节流只能用于最原始的I/O

当不使用:

您不应该使用字节流来读取字符流

例如,要读取文本文件

字符流:

从Oracle文档页面约character streams

Java平台存储字符使用Unicode约定值。字符流I/O自动将此内部格式转换为本地字符集和从本地字符集转换。

所有的字符流类都是从ReaderWriter开始的。

字节流通常是字节流的“包装”。字符流使用字节流来执行物理I/O,而字符流处理字符和字节之间的转换。

有两个通用的字节到字符“桥”流:InputStreamReaderOutputStreamWriter

何时使用:

要阅读的字符流的无论是从Socket或字符

File总结

字节流读取和写入一字节一次。在处理更复杂的数据时,我们必须避免使用字节流。

字符流和其他可用的流应该用来处理复杂的数据。

+0

这些概念总是很神秘。 [问题](https://stackoverflow.com/q/46953036/3317808) – overexchange 2017-10-26 11:56:31

0

字符流将逐字符地读取文件。字符流能够读取16位字符(字节流读取8位字符)。字符流能够将8位数据隐式转换为16位数据,反之亦然。字符流可以支持ASCII,Unicode,UTF-8,UTF-16等所有类型的字符集。但字节流只适用于ASCII字符集。Java平台使用Unicode约定存储字符值。字符流I/O自动将此内部格式转换为本地字符集和从本地字符集转换。

除非您正在处理二进制数据,例如图像和声音文件,否则您应该使用读写器来读取和写入字符流的信息。