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

Java I/O流;有什么区别?,java,io,stream,java-io,Java,Io,Stream,Java Io,java.io有许多不同的流(FileInputStream、FileOutputStream、FileReader、FileWriter、BufferedStreams等等),我在确定它们之间的差异时感到困惑。有哪些示例表明一种流类型优于另一种流类型,它们之间的真正区别是什么?这是一个大话题!我建议您从以下内容开始: I/O流表示输入 源或输出目标。A. 流可以表示许多不同的类型 各种来源和目的地, 包括磁盘文件、设备等 程序和内存阵列 流支持许多不同的类型 数据量,包括简单字节, 基本数据类

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

这是一个大话题!我建议您从以下内容开始:

I/O流表示输入 源或输出目标。A. 流可以表示许多不同的类型 各种来源和目的地, 包括磁盘文件、设备等 程序和内存阵列

流支持许多不同的类型 数据量,包括简单字节, 基本数据类型,本地化 角色、角色和对象。一些溪流 简单地传递数据;其他人操纵 并以有用的方式转换数据


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

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


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

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

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

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

正如mmyers所写:

流:一次一个字节

读者/作者:一次一个角色

缓冲*:一次有许多字节/字符


在学习Java时,我对Java.io进行了如下思考:

溪流
  • 面向字节的流(8位)
  • 适用于二进制数据,如Java.class文件
  • 适用于“面向机器”的数据
读者/作者
  • 面向字符(utf-16)的流(16位)
  • 适用于Java源代码等文本
  • 适用于“以人为本”的数据
缓冲
  • 除非另有证明,否则始终有用

字节流是java 1.0中字符和字节最常用的流类型。Java1.0之后,它被弃用,字符流扮演着重要角色。比如说

BufferedReader将从源代码中获取字符,其构造函数如下所示 缓冲读取器(读取器输入读取器)

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


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

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

  • 字节流(8位字节)Æ抽象类有:InputStream和OutputStream
  • 字符流(16位UNICODE)Æ抽象类有:Reader和Writer
io.*类使用decorator设计模式。decorator设计模式附加 运行时对对象的责任。装饰器比继承更灵活,因为继承 在编译时将职责附加到类。io.*类使用decorator模式来构造 运行时基于一些基本类的不同行为组合。


从K.Arulkumaran&A.Sivayini的《Java/J2EE求职面试伴侣》一书中,我不同意“几乎所有时间”都使用缓冲流是好的。事实上,根据我的经验,这通常是无用的开销。真的吗?最近一次检查时,切换到普通文件读取器时,性能下降了约40%。你在读什么?这可能是对Java IO API中各种流、读写器流的最全面的概述:它是一个更大的Java IO教程的一部分,涵盖了基于字节和字符的流。它还包括用于读取和写入原始数字数据的流,如int的float等。它还包括用于解析的流,如PushbackInputStream和PushbackReader。