您的位置:首页 > 职场人生

黑马程序员——Java IO总结一

2015-07-25 09:16 239 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

IO流就是处理设备间数据的传输,主要分为内存,硬盘,键盘,控制台,网络等

Java中的IO流按操作数据分为字节流与字符流,按流向分为输入流和输出流,输入输出是相对于内存来说

字节流抽象基类InputStream和OutputStream,字符流的抽象基类Reader和Writer

其子类都是以其父类名作为类名的后缀

字符流

FileWriter 写出字符流,创建其对象时,若文件没有则创建,有的话则覆盖源文件。传递一个true参数,则不覆盖,进行续写。

write()将字符串写入到字符流中,flush()刷新字符流,close(),刷新并关闭流,其实关闭的是系统资源,Java中的对象回收由垃圾回收器完成,这是两块不同的内容,一个是Java中的,一个是系统中的。

IO异常的处理用try,catch来完成,在finally中对关闭对象进行判断,关闭前判断是否为空,在try外创建对象引用,在try内创建对象初始化

FileReader读入字符流

read()一次读一个字符,且会自动往下读

read(char[])读取文本文件数据,通过字符数组读取

BufferedWriter和BufferedReader为字符流缓冲区,缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区前,必须要有流对象,只要用到缓冲区,就要记得刷新,其实关闭缓冲区,就是在关闭缓冲区中的流对象

BufferedWriter提供了一个跨平台的换行符newLine()

BufferedReader提供了一个一次读一行的方法,方便获取,readLine()返回空时读到末尾,但并不返回回车符

缓冲区是一种装饰设计模式

       当想要对已有的对象进行功能增强是,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能,那么自定义的该类成为装饰类

       装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能

      装饰模式比继承更灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系

      装饰类和被装饰类同属于一个体系接口或父类

下面是通过缓冲区复制文本文件的一个例子



字节流

InputStream和OutputStream和字节输入流和输出流,其基本操作和字符流是一样的,字节流能操作媒体文件。其write()方法直接将字节写入到目的地中,available方法能获取文件字节数,同时为了高效,也可以用字节流的缓冲区,其代码和上面的类似。

字节流转换成字符流可以用InputStreamReader,然后可以利用字符流的缓冲区readLine方法

键盘录入最常见的操作为 new BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

字符流转换成字节流可以用OutputStreamWriter

流操作的基本规律

1、明确源和目的

       源:输入

       目的:输出

2、操作的数据是否是纯文本

       是:字符流

       否:字节流

3、体系明确后,再明确使用哪个对象,通过设备来进行区分

      源设备:内存,硬盘,键盘,网络

      目的设备:内存,硬盘,控制台,网络

4、是否需要额外功能

     字符和字节之间的桥梁,通常,涉及到字符编码转换时用转换流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: