java基础之IO流(续集)
一、字符流的缓冲区
1、简述
出现原因:为了提高操作数据的效率;
它是结合流来使用的,对流的功能加强;
对应的类:BufferedWriter、BufferedReader;
2、使用
思路:a.要想使用它,就得先创建一个流;
b.使用缓冲区:将创建好的流进行封装,就是讲这个流作为参数,放入这个缓冲对象的构造函数 中;
c.遇到缓冲区就得刷新,同时,还要关闭缓冲区,这就相当于关闭了流资源;
注意:跨平台的换行符:void newLine();这个方法是缓冲流的;
3.具体代码的应用:
A. BufferedWriter:
B. BufferedReader:
C.文件的拷贝:
注意:a----- readLine方法不包含任何行终止符; b-----readLine方法它的原理其实就是调用的read方法,只不过是读取完一行才将其fanhui
d.自建一个缓冲区(也算是一次读一行的方法)
e.装饰设计模式:
当想要对已有的对象进行功能增强时,自定义一个类,将已有对象传入,基于已有的功能并提供加强功能,那么自定义的该类就是装饰类。
装饰类一般是通过构造方法将已有对象作为参数传入,然后在定义类中创建一个方法,再添加一些功能;
而后调用已有对象的初级方法就形成了一个具有强大功能的方法。
示例代码如下:
}
f.包装类与继承的区别:
包装类其实就相当于一个专业的加工工厂,什么都加工;如果让这个工厂属于一个部门的话(继承),公司加了一个新的部门(新子类)也要加工东西,要么就得在这个新部门自己建一个加工工厂(自己再建一个装饰类),要么就得协调公司来共同用一个;所以如果将这个加工工厂独立起来的话(不用去继承,单独一个类),就不用麻烦了,直接去加工工厂就可以了(直接去调用),方便独立,不会与其他部门产生联系。当然这个加工工厂也属于这家公司,即他们是一个系统的。
g.自定义一个带行号的缓冲区对象
这个缓冲区对象的应用代码如下:
自定义的代码如下:(当然可以继承上面的那个自定义的MyBufferedReader)
二、字节流
1、简述要点与注意事项
两基类:inputStream 、 outputStream
用于操作图片数据;
windows中的回车是由“\r\n”组成的;(所以在上述的一个方法中最好还是加上那个\r\n的判断)
字符流中的那个数组为char类型,而字节流中的为byte类型数组;
示例代码:
2、复制图片
复制图片使用的是字节流,要是使用字符流的话,图片有可能没办法显示;这个原理同复制文件,只不过是 用字符流。代码如下:
3.复制MP3文件
这里也可用缓冲区对象来做,建立BufferedInputStream、BufferedoutputStream;这两个也有自己的read方 法继承的;
4. 缓冲区的read原理:
显示代码如下:
5. 读取键盘录入
6.转换流的出现
7.键盘输入屏幕输出
8.流对象的操作规律
要明确的三个条件:源和目的、操作的文件是什么、选用体系的哪个对象
---源与目的:源就是输入(读取)流 ;inputStream、reader
目的就是输出(写入)流;outputStream、writer
---文件:是否纯文本文件
是:用字符流
否:用字节流
---体系明确后使用的对象:
通过设备来区分:
源:内存、硬盘、键盘
目的:内存、硬盘、屏幕(控制台)
例如:1、文本文件
源 :文件;使用读取流、reader;由于操作文件就用:FileReader;
目的:文件;使用写入流、writer;由于操作文件就用:FileWriter;
2.非文本文件
源 :文件;使用读取流、InputStream;由于操作文件就用:File
InputStream;
要是从控制台输入的话就是用System.in;
目的:文件;使用写入流、OutputStream;由于操作文件就用:File
OutputStream;
要是从控制台输出的话就是用System.out;
注意事项:要是提高效率的话,就得采用缓冲流;
在存储的时候需要按照要求的编码来写入,只有转换流有;即就是解码的过程;
9.异常日志信息的报告
代码如下:
10.系统信息的输出