跟我学IO(InputStream简介)

在java中InputStream表示输入字节流,每次传递一个字节(8bit),输入流表示数据流向程序内部。InputStream是一个接口,定义了操作输入字节流最基本的操作。如:read、make、close等基本方法。其他所有的输入字节流都直接或间接的实现了该接口。

在java中InputStream表示输入字节流,每次传递一个字节(8bit),输入流表示数据流向程序内部。InputStream是一个接口,定义了操作输入字节流最基本的操作。如:read、make、close等基本方法。其他所有的输入字节流都直接或间接的实现了该接口。

InputStream接口的实现体系结构图如下:

InputStream继承树结构图

其中每个类/接口简介如下:

java.io.InputStream

该接口是所有输入字节流的超类。其中定义了输入流的基本操作。如:关闭字节流、读取数据、标记当前位置等方法。

java.io.ByteArrayInputStream

ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪read方法要提供的下一个字节。关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。常用于将字符串转换成输入流。如:你有一个getInfo()方法,这个方法返回一长串有规则的字符串,字符串使用换行符进行分割。此时,你需要通过BufferedInputStream来进行按行进行分析,你就可以使用ByteArrayInputStream将字符串装换成输入流。

java.io.FileInputStream

FileInputStream用于从文件系统中的某个文件中获得输入字节流。哪些文件可用取决于主机环境(Windows、Linux、Unix或MacOS等)。通常FileInputStream用于读取诸如图像数据之类的原始字节流。如果要读取字符流(特别是:中文等),请考虑使用 FileReader。

java.io.FilterInputStream

FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。FilterInputStream 类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream 的所有方法。FilterInputStream 的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。实际上就是将InputStream实现类的实例作为该类的实现来为外部提供服务(同时实现了InputStream接口)。详情看后续文章进行的分析。 

java.io.BufferedInputStream

BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。

java.io.DataInputStream

DataInputStream数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。如:readLong、readFloat、redInt等基本数据类型读取方法。

java.io.LineNumberInputStream

已过时,不推荐使用。此类是一个输入流过滤器,它提供跟踪当前行号的附加功能。

java.io.PushbackInputStream

PushbackInputStream 为另一个输入流添加性能,即“推回 (push back)”或“取消读取 (unread)”一个字节的能力。在代码片段可以很方便地读取由特定字节值分隔的不定数量的数据字节时,这很有用;在读取终止字节后,代码片段可以“取消读取”该字节,这样,输入流上的下一个读取操作将会重新读取被推回的字节。例如,表示构成标识符字符的字节可能由表示操作符字符的字节终止;用于读取一个标识符的方法可以读取到遇到操作符为止,然后将该操作符推回以进行重读。  

java.io.ObjectInputStream

该类用于对象反序列化,即将ObjectOutputStream序列化的java对象读取到内存当中。

java.io.PipedInputStream

管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏。

java.io.SequenceInputStream

SequenceInputStream表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

java.io.StringBufferInputStream

已过时,不推荐使用。此类允许应用程序创建输入流,在该流中读取的字节由字符串内容提供。

上面只是简单的介绍了每个输入流类的作用,在接下来的文章中将通过实例代码和分析java源码来了解每个类的具体用法和使用场景。

少壮不努力,老大徒悲伤。——汉乐府古辞《长歌行》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
目录
热门标签
热门文章
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号