黑马程序员——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、是否需要额外功能
字符和字节之间的桥梁,通常,涉及到字符编码转换时用转换流
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、是否需要额外功能
字符和字节之间的桥梁,通常,涉及到字符编码转换时用转换流
相关文章推荐
- 程序员,为什么千万不要重写代码?
- 关于“构造函数”中的几个小问题,也许面试会问到哦~
- 神奇的decimal,也许面试会问到哦~
- 【黑马程序员】----java基础---反射
- 黑马程序员——Java基础-异常
- 【LeetCode-面试算法经典-Java实现】【029-Divide Two Integers(两个整数相除)】
- 【LeetCode-面试算法经典-Java实现】【028-Implement strStr() (实现strStr()函数)】
- 【LeetCode-面试算法经典-Java实现】【027-Remove Element(删除数组中指定的元素)】
- 程序员,为什么千万不要重写代码?
- Two Sigma面试专题
- 阿里电话面试问题----100万个URL如何找到出现频率最高的前100个?
- 黑马程序员--面向对象02
- 【面试加分项】java自定义注解之申明注解
- 第一次使用拉勾网求职经历
- 全面解析《嵌入式程序员应该知道的16个问题》
- 出来行迟早是要还的(篇四):游戏开发离职日志和面试日志
- 程序员技术练级攻略(转)
- 黑马程序员--面向对象01
- 黑马程序员——Java基础-多态
- 黑马程序员——Java基础---常见对象1