Java I / O流; 有什么区别?

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

这是一个很大的话题! 我建议你先阅读I / O Streams :

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

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

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

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

任何“缓冲”:一次多个字节/字符。 几乎所有的时间都很好。

在学习Java时,我制作了关于java.io的心理方案:

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

读/写器

  • char(utf-16)导向流(16位)
  • 适用于Java源等文本
  • 适合“以人为本”的数据

缓冲的

  • 除非另有certificate,否

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

  • 文件输入流是使用文件获取输入
  • 文件输出流是使用输出写入文件

等等等等

正如mmyers写道:

流:一次一个字节。

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

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

我也发现了这个java_tip_how_read_files_quickly

很有用! 它显示哪些流最有效。

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

这可能是Java IO API中各种流,Reader和Writer的最全面的概述:

http://tutorials.jenkov.com/java-io/overview.html

它是更大的Java IO教程的一部分,涵盖了基于字节和字符的流。

它还包括用于读取和写入原始数字数据的流,如int的float等。

它还包括用于解析的流,如PushbackInputStream和PushbackReader。

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

BufferedReader将从源中获取字符,其构造函数看起来像BufferedReader(Reader inputReader)。

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

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

Java输入和输出是根据称为“流”的抽象概念定义的,该流是一系列数据。 有两种流。

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

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

来自K.Arulkumaran和A.Sivayini的Java / J2EE Job Interview Companion一书