23

java.io有许多不同的I/O流(FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedStreams 等),我在确定它们之间的差异时感到困惑。有哪些示例表明一种流类型优于另一种流类型,它们之间的真正区别是什么?

4

7 回答 7

42

流:一次一个字节。适用于二进制数据。

读者/作家:一次一个字符。适合文本数据。

任何“缓冲”:一次很多字节/字符。几乎一直都很好。

于 2009-07-21T15:47:37.110 回答
27

在学习 Java 时,我对 java.io 做了这样的心理计划:

  • 面向字节的流(8 位)
  • 适用于二进制数据,例如 Java .class 文件
  • 适用于“面向机器”的数据

读者/作家

  • 面向字符(utf-16)的流(16 位)
  • 适用于 Java 源代码等文本
  • 适合“以人为本”的数据

缓冲的

  • 除非另有证明,否则总是有用的
于 2009-07-21T15:55:38.017 回答
12

这是一个很大的话题!我建议您从阅读I/O Streams开始:

I/O 流表示输入源或输出目标。一个流可以表示许多不同类型的源和目标,包括磁盘文件、设备、其他程序和内存阵列。

流支持多种不同类型的数据,包括简单字节、原始数据类型、本地化字符和对象。有些流只是简单地传递数据;其他人以有用的方式操纵和转换数据。

于 2009-07-21T15:47:03.213 回答
8

将每个名称分成单词:每个大写字母都是不同的单词。

  • 文件输入流是使用Stream文件中获取输入
  • File Output Stream是使用StreamOutput写入File

等等等等

正如 mmyers 所写:

流:一次一个字节。

读者/作家:一次一个字符。

缓冲*:一次很多字节/字符。

于 2009-07-21T15:52:46.260 回答
3

您提到的专业化是用于为各种数据源提供标准接口的特定类型。例如,FileInputStream 和 ObjectInputStream 都将实现 InputStream 接口,但将分别对文件和对象进行操作。

于 2009-07-21T15:48:18.747 回答
2

字节流是 Java 1.0 中主要且广泛使用的流类型,用于字符和字节。在 java 1.0 之后,它被弃用了,字符流起着重要作用。即,例如

BufferedReader 会从源中获取字符,它的构造函数看起来像 BufferedReader(Reader inputReader)..

这里 Reader 是一个抽象类,它的一个具体类是 InputStreamReader,它将字节转换为字符并从键盘(System.in)获取输入......

BufferedReader :包含将从流中读取字符的内部缓冲区。内部计数器通过 read() 跟踪要提供给缓冲区的下一个字符。InputStreamReader 将输入作为字节并在内部转换为字符。

于 2009-11-10T10:25:01.530 回答
2

Java 输入和输出是根据称为“流”的抽象概念定义的,它是数据序列。有2种流。

  • 字节流(8 位字节) Æ 抽象类是:InputStream 和 OutputStream
  • 字符流(16 位 UNICODE) Æ 抽象类是:Reader 和 Writer

java.io.* 类使用装饰器设计模式。装饰器设计模式在运行时将责任附加到对象。装饰器比继承更灵活,因为继承在编译时将责任附加到类。java.io.* 类使用装饰器模式基于一些基本类在运行时构造不同的行为组合。 在此处输入图像描述在此处输入图像描述

摘自K.Arulkumaran 和 A.Sivayini所著的Java/J2EE 工作面试伴侣一书

于 2017-11-24T10:56:14.670 回答