跟我学IO(IO总结)

从前面所有的“跟我学IO”系列讲解了java普通io的操作。普通Java IO分输入流(InputStream)和输出流(OutputStream),并且每次只能操作一个字节,即使使用BufferedInputStream/BufferedOutputStream流也是如此。

从前面所有的“跟我学IO”系列讲解中,了解了Java IO包中大部分类的使用。IO即输入输出操作,这里的输入指从磁盘加载数据到内存中,输出值将内存中的数据写入到磁盘或者网络中。Java IO按照读取数据的大小分为:

【字节流】字节流又分为:输入字节流(InputStream)和输出字节流(OutputStream)

【字符流】字符流又分为:输入字符流(Reader)和输出字符流(Writer)

注意:字节流每次只能操作一个字节;字符流每次只能操作一个字符。即使使用Java IO包装类BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter类也是如此。

普通Java IO图

上图是原始IO类操作流程(没有经过封装的IO流操作图,如:FileInputStream/FileOutputStream类),每次从文件中读取一个字节/字符或者每次写一个字节/字符到文件中去。这样每次只能读取/写入一个字节/字符将严重影响IO效率,因此就出现了在未经封装IO上面扩展出来的高级IO操作类,如:BufferedInputStream/BufferedOutputStream类,这些类中间存在一个字节/字符数组(缓存区)。如下图:

高级IO图

上图多出了一个缓冲区模块,这就可以大大提高IO的效率。不必客户端每次都一次一次的请求底层API接口,则是批量的请求底层API。

Java IO类的层次如下图所示:

字节输入流的类层次图:

java io层次图

InputStream接口定义了输入字符流操作规范。FileInputStream是输入字符流的最基本操作,BufferedInputStream是在FileInputStream类的基础上封装了更多高级的操作,DataInputStream可以将DataOutputStream写出的java基本数据读取到内存中来,ObjectInputStream是将ObjectOuputStream写出的对象读取到内存中来(反序列化)。

字节输出流的类层次图:

java io层次图

OutputStream接口定义了输出字节流操作规范,其中ileOutputStream提供了IO操作基本功能,属于原始流操作,BufferedOutputStream是对FileOutputStream的封装,提供了更多高级功能。DateOutputStream类提供了将java基本数据类型输出到文件的功能,ObjectOutputStream提供了将实现了Serializable接口的类写出到文件中(序列化)。

字符输入流类层次图:

跟我学IO(IO总结)

Reader接口定义了输入字符流的操作规范,其中BufferedReader提供了更多高级的功能,如每次读取一行数据,LineNumberReader类提供了获取数据行号的功能等。

字符输出流类层次图:

跟我学IO(IO总结)

Writer接口定义了输出字符流的操作规范,其中BufferedWriter提供了更多高级的功能,如每次写出一个字符输出,字符串等

如果上面这些IO类你都弄明白了,你IO这个包就学的差不多了,但是下一步还需要你继续学习NIO。

阅读使人充实,会谈使人敏捷,写作使人精确。——培根
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号