java io 学习笔记

  • java io 分类:
  1. java.io包中的是阻塞型IOjava.nio(new io)中的是非阻塞型IOjava.io采取等待数据的方式工作。new io 采用了observer模式:观察者检测IO端口,如果有数据进来就通知相应的应用程序。
  2. 按输入方向分,java分输入流和输出流,方向的参照是程序。
  3. 按处理数据单位的不同,分字节流和字符流。字节流读取的最小单位是一个字节(8bit),字符流读取的最小单位是一个字符(16bit)。
  4. 按功能的不同,分节点流和处理流。节点流是直接读写数据的流(直接和数据源打交道的流);处理流是对节点流封装的基础上的一种流(和打交道的流),比方FileinputStream是一个节点流,它像一根吸管一样插进数据源里吸取数据,而BufferedInputStream则是处理流,它像一个桶一样接在吸管的另一头(处理)字符。
  5. 其他常常听到的流有:对象流、缓冲流、压缩流、文件流等,其实都是节点流和处理流的分类。你也可以创建你自己的流。

java.io包中的最基础的类就是一下四个:


字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer

缓冲区

默认没有用到缓冲区,流中的的数据直接到达终点。

Writer用到缓冲区,比如要把数据写入硬盘时,当流没有被关闭的时候而且没有调用flush( )方法时,数据不会被写入硬盘,除非缓冲区满溢了。

以上四个类都是直接从java.lang.Object继承来的,而且他们都是抽象类。比如InputStream的定义是这样写的:public abstract class InputStream extends Object implements Closeable。所以它们需要对应的子类为它们的所有抽象方法提供实现。

  • java io的(部分类)组织(java.io包):

java io 学习笔记_第1张图片


1:部分组织图

java io 学习笔记_第2张图片

2: WriterReader的组织图

为了在适当的时候能把这两种流类联系起来,API中设置了两个类,充当二者的桥梁。它们分别是InputStreamReaderOutputStreamWriter InputStreamReader将输入的字节流转换为字符流;而OutPutStreamWriter将输出的字符转换流为字节流。

java io 学习笔记_第3张图片

3: InputStreamReaderOutputStreamWriter的示意图,小段代表Stream(注意方向,相同大小的端对上才能正确的把两个流对接上)



参考资料:

http://lavasoft.blog.51cto.com/62575/95384/

http://miaoxiaodong78.blog.163.com/blog/static/187651362007011810123/

http://blog.sina.com.cn/s/blog_4beab9e2010008jn.html

你可能感兴趣的:(java io 学习笔记)