Java笔记:IO

2013.06.09 | Comments

说明,本文内容来源于java io系列01之 “目录”,做了一些删减。

Java库的IO分为输入/输出两部分。

早期的Java 1.0版本的输入系统是InputStream及其子类,输出系统是OutputStream及其子类。

后来的Java 1.1版本对IO系统进行了重新设计。输入系统是Reader及其子类,输出系统是Writer及其子类。

Java1.1之所以要重新设计,主要是为了添加国际化支持(即添加了对16位Unicode码的支持)。具体表现为Java 1.0的IO系统是字节流,而Java 1.1的IO系统是字符流。

字节流,就是数据流中最小的数据单元是8位的字节。

字符流,就是数据流中最小的数据单元是16位的字符。

字节流在操作的时候,不会用到缓冲;而字符流会用到缓冲。所以,字符流的效率会更高一些。

至于为什么用到缓冲会效率更高一些呢?那是因为,缓冲本质上是一段内存区域;而文件大多是存储在硬盘或者Nand Flash上面。读写内存的速度比读写硬盘或Nand Flash上文件的速度快很多!

目前,文件大多以字节的方式存储的。所以在开发中,字节流使用较为广泛。

Java 1.0和Java 1.1 的IO类的比较

基本类对比表

Java 1.0 IO基本类(字节流) Java 1.1 IO基本类(字符流)
InputStream Reader
OutputStream Writer
FileInputStream FileReader
FileOutputStream FileWriter
StringBufferInputStream StringReader
StringWriter
ByteArrayInputStream CharArrayReader
ByteArrayOutputStream CharArrayWriter
PipedInputStream PipedReader
PipedOutputStream PipedWriter

装饰器对比表

Java 1.0 IO装饰器(字节流) Java 1.1 IO装饰器(字符流)
FilterInputStream FilterReader
FilterOutputStream FilterWriter(没有子类的抽象类
BufferedInputStream BufferedReader(也有 readLine())
BufferedOutputStream BufferedWriter
DataInputStream
PrintStream PrintWriter
LineNumberInputStream LineNumberReader
StreamTokenizer
PushBackInputStream PushBackReader

io框架

以字节为单位的输入流的框架图:

是以字节为单位的输出流的框架图:

以字节为单位的输入流和输出流关联的框架图:

以字符为单位的输入流的框架图:

以字符为单位的输出流的框架图:

以字符为单位的输入流和输出流关联的框架图:

字节转换为字符流的框架图:

字节和字符的输入流对应关系:

字节和字符的输出流对应关系:


原创文章,转载请注明: 转载自JavaChen Blog,作者:JavaChen
本文链接地址:http://blog.javachen.com/2013/06/09/note-about-java-io.html
本文基于署名2.5中国大陆许可协议发布,欢迎转载、演绎或用于商业目的,但是必须保留本文署名和文章链接。 如您有任何疑问或者授权方面的协商,请邮件联系我。