Java review--IO

来源:互联网 发布:小米5抢购软件下载 编辑:程序博客网 时间:2024/06/07 13:18



为什么出现IO流?

File是对文件的增、删、改、查、移动,但是File不可以对文件的内容进行读、取,而IO流就是为了解决这一问题的。


什么是IO流呢?

Input Output,流的功能就是进行数据的输入和输出。根据流的方向分为输入、输出流;根据流输出的数据格式分为字节、字符流;根据是否经过处理分为节点、处理流。


IO流包括什么?

IO流的核心4大基本流:InputStream、OutputStream、Reader、Writer。

通过装饰这些核心流,扩展功能的流如下:


BufferedInputStream:----------------------------->针对缓存
能为输入流提供缓冲区,能提高很多IO的速度。你可以一次读取一大块的数据,而不需要每次从网络或者磁盘中一次读取一个字节。特别是在访问大量磁盘数据时,缓冲通常会让IO快上许多。
实现:
InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\input-file.txt"), 8 * 1024);


DataInputStream:----------------------------->针对基本数据类型
可以使你从输入流中读取Java基本类型数据,而不必每次读取字节数据。你可以把InputStream包装到DataInputStream中,然后就可以从此输入流中读取基本类型数据了。




ObjectInputStream:----------------------------->针对对象
ObjectInputStream能够让你从输入流中读取Java对象,而不需要每次读取一个字节。你可以把InputStream包装到ObjectInputStream中,然后就可以从中读取对象了。
读的对象必须是Object的实例,必须事先通过ObjectInputStream序列化到“object.data”文件。



字节数组和过滤器输入输出流:----------------------------->针对数组
ByteArrayInputStream,ByteArrayOutputStream
字节数组传给ByteArrayInputStream的构造函数,把ByteArrayInputStream赋值给InputStream就可以了。



IO流跟设计模式之间的关系?

装饰者模式:

在不必改变原来类文件和使用继承的情况下,动态的扩展一个对象的功能。它通过创建一个包装的对象,也就是装饰,来包裹真正的对象。

InputStream就是装饰模式中的超类(Component),FileInputStream ,ByteArrayInputStream等相当于被装饰者。BufferedInputStream是被装饰者的具体产物。


适配器模式:

将一个类的接口,适配成用户所期待的。一个适配器允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在类中。


InputStreamReader和InputStream最大的区别是:InputStream读取的是字节流,读取的都是二进制输入输出,速度快,不容易乱码,但是它的Read()方法,因为读取的是字节,不易阅读;InputStreamReader读取的时候,将字节转换成字符流。

构造函数如下:

   public InputStreamReader(InputStream in, String charsetName)         throws UnsupportedEncodingException     {        super(in);        if (charsetName == null)        throw new NullPointerException("charsetName");        sd = StreamDecoder.forInputStreamReader(in, this, charsetName); //转码的过程    } 




参考博客:

从装饰者模式的理解说JAVA的IO包














0 0