Java io 流分析
1. Io流按类型分为两种:字节流和字符流
2. 字节流:InputStream(输入字节流,读取文件) OutputStream(输出字节流,输出文件)
字符流:Reader(输入字符流,读取文件) writer(输出字符流,输出文件)
3. 字节流用于任何文件的输入输出。字符流只适用与文本文件的读写。如果是图片之类的还是得适用字节流
InputStream(默认构造函数)
在这里首先的说一下设计模式之装饰模式(Decorator)。
1. 对象:抽象类InputStream;其中read()方法是抽象方法
实现类 FilterInputStream 继承FilterInputStream
1)定义protected InputStream 对象
2)构造方法传入一个参数,参数是InputStream
3)其它方法都回调InputStream的方法
具体继承类粉墨登场:BufferedInputStream
1) 默认缓存大小为8182字节,也就是8K
2) 至始至终都么有将read方法实现。一直是调用的InputStream的read方法。Buffered的创建必须依靠InputStream的其它子类进行装饰后才能使用
其它继承类 例如:FileInputStream;
1) 3个构造函数,一个文件路径(全),一个是文件,一个是FileDiscriptor(此文件是对操作系统不同而做的封装类)
ByteArrayInputStream 构造函数为字节 读取字节
5. OutputStream
1) 输出流 抽象类 OutputStream 默认两个构造函数 第一个byte ,第二个是byte,start,length;抽象writer()方法
2) FilterOutputStream:继承抽象类OutputStream ,定义一个protected OutputStream,构造函数是OutputStream,writer()方法回调outputStream;
3) BufferedOutputStream :继承抽象类FilterOutputStream,构造函数继续传递outputstream.初始化8k字符,如果大于初始化的大小则写入目标文件。
4) FileOutputStream:4个构造函数,boolean是是否追加的功能
6. Reader
对象:这里所说的是Adapter(适配器模式)
1) 抽象类Reader ,抽象close和read(char[],int,int) ,
2)实现类InputStreamReader继承Reader,主要是两个构造方法。一个InputStreamReader
(InputStream in)
:采用默认的字符编码InputStreamReader
(InputStream in,
String charsetName)
使用制定字符集编码。(引用外部的接口适配实现)
构造函数中实现了将InputStream转换成reader。read和close方法都是调用InputStream的方法。
3)FileReader继承InputStreamReader,两个构造函数:filereader(String filename),fileReader(File file),这两个参数调用的是FileInputStream。(使用外部的接口实现类完成具体的实现)
适配器:分为两种,
一种是类适配器:继承外部类。调用其实现方法
一种是对象适配器:将多个外部实现类(或者接口)放入适配器中,进行调用。
这里InputStreamReader是调用外部抽象类来实现需要的功能。FileReader就是调用FileInputStream的实现。FileReader如果要使用字符集编码的话,得使用FileInputStream来实现。
Writer
同Reader