thinking in java (十九) ----- IO系列总览

io简介

java io是为了实现“文件”,“控制台”,“网络设备”这些输入输出设备之间的通信而设计的系统。例如,对于一个文件,我们可以打开进行读取与输出。在java1.0的时候,java提供的类都是以字节(byte)为单位,到了java1.1,为了国际化,添加了许多以字符(Unicode)为单位进行操作的类

IO中我们常说到的一个概念是“流”,所谓“流”就是一种抽象的数据总称,本质是为了进行传输。

1)按照流的数据流向,可以分为输入流和输出流

2)按照流中的数据单位,可以分为字节流和字符流

IO框架

1,以字节为单位的输入流框架图。

  1. InputStream是以字节为单位的输入流的超类。InputStream提供了read()方法从输入流读取字节数据
  2.  ByteArrayInputStream是字节数组输入流。它包含有一个缓冲区,该缓冲区包含从流中读取的数据,通俗点说,他的内部缓冲区就是一个字节数组,而ByteArrayInputStream就是通过字节数组实现的
  3. PinpedInputStream是管道输入流,他一般和PinpedOutputStream搭配使用,能实现多线程间的管道通信
  4. FilterInputStream是过滤输入流,他是BufferdInputStream和DataInputStream的父类
  5. DataInputStream是数据输入流,它是用来装饰其他输入流,他允许程序以机器无关方式从底层输入流中读取基本java类型
  6. BufferedInputStream是缓冲输入流,他的作用是为另一个输入流添加缓冲功能
  7. File是文件和目录路径名的抽象表示形式。注意两点,a)File不仅仅表示文件,也可以表示目录b)File的父类是Object,不是inputStream
  8. FileDescriptor是“文件描述符”,可以用来表示开放文件,开放套接字等
  9. FileInputStream是文件输入流, 通常用来对文件进行读取操作
  10. ObjectInputStream是对象输入流,和ObjectOutputStream一起,用提供对基本数据或者对象的持久存储

2,以字节为单位的输出流的框架图

  1.  OutPutStream是以字节为单位的输出流的超类,OutPutStream提供了write()方法从输出流中写入字节数据
  2. ByteArrayOutputStream是字节输出流,写入ByteArrayOutputStream的数据被写入到一个byte数组,可以使用toByteArray,toString获取数据
  3. PipedOutPutStream是管道输出流,他和PipedInPutStream配合使用,能够实现多线程的管道通信
  4. FilterOutputStream是过滤输出流,另外俩类的父类
  5. DataOutputStream是数据输出流用来装饰其他输出流,他允许程序以机器无关方式从底层输入流中读取基本java类型
  6. BufferedOutputStream是缓冲输出流,他的作用是为另一个输出流添加缓冲功能
  7. PrintStream是打印输出流,能为其他输出流添加功能,方便打印
  8. FileOutputStream是文件输出流,常常用于文件写入操作
  9. ObjectOutputStream是对象输出流,和ObjectInputStream一起,用来提供对基础数据或者对象的持久存储

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

 

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

  1. Reader是字符为单位的输入流的超类,提供了read方法来读取字符数据
  2.  CharArrayReader是字符数组输入流,用于读取字符数组,操作的数据是以字符为单位
  3. PipedReader是字符类的管道输入流,和PipedWriter一起通过管道进行线程间的通信,在使用管道通信是吗,这两个类必须一起使用
  4. FilterReader是字符类型的过滤输入流
  5. BufferedReader是字符缓冲输入流,他的作用是为另外一个输入流添加缓冲功能
  6. InputStreamReader是字节转字符的输入流,是字节和字符流的桥梁,它使用指定的charset读取字节并将其解码为字符
  7. FileReader是字符类文件的文件输入流,常用于对文件进行读取操作

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

  1. Writer 是以字符为单位的输出流的超类。它提供了write()接口往其中写入数据。
  2. CharArrayWriter 是字符数组输出流。它用于读取字符数组,它继承于Writer。操作的数据是以字符为单位!
  3.  PipedWriter 是字符类型的管道输出流。它和PipedReader一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedWriter配套使用。
  4. FilterWriter 是字符类型的过滤输出流。
  5. BufferedWriter 是字符缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
  6. OutputStreamWriter 是字节转字符的输出流。它是字节流通向字符流的桥梁:它使用指定的 charset 将字节转换为字符并写入。
  7. FileWriter 是字符类型的文件输出流。它通常用于对文件进行读取操作。
  8. PrintWriter是字符类的打印输出流,用来装饰其输出流,使其能够方便地打印

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

7,字节和字符输入流对应关系

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

9,字节流与字符流的转换 

有时候字节流和字符流需要相互转换,有两个类InputStreamReader和OutputStreamWriter,用来进行字符流和字节流之间的转换。

InputStreamReader用于讲一个字节流中的字节解码为字符

OutputStreamReader用于将写入的字符编码成字节后吸入一个字节流

 

 

原文:http://www.cnblogs.com/skywang12345/p/io_01.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值