关于缓冲流;
缓冲流是处理流的一种
缓冲流是作用于已有的流上使用的流,
缓冲流可以作用在以有的节点流上(比如作用在FileReader,FileWriter)
使用节点流的目的是为为了更高效率的操作文件
基本字符型缓冲流和字节型缓冲流;
BufferedInputStraem
BufferedOutputStraem
BufferReader
BufferWriter
字符型缓冲流的使用;
1,实例化一个File类指向相应的文件
(File file = new File(“填入文件路径”)😉
2,根据传入文件的类型将实例化的File作为参数传入到对应的节点流中
(用字符型节点流举例;FileReader flr = new FileReader(file)😉
(用字符型节点流举例;FileWriter flw = new FileWriter(file)😉
3,将对应的节点流当作参数传入到缓冲流中
(BufferderReader bfr = new Bufferder(flr)😉
(BufferderWriter bfw = new Bufferder(flw)😉
4,执行对应的读写操作;
bfr.read();
bfw.write();
5,关闭流(在上文所说的四个缓冲流中关闭了缓冲流之后他会对应的关闭自己作用上的流所以不需要手动关闭,有一些其他的缓冲流不会关闭自己作用的流需要手动关闭)
bfr.close();
bfw.close();
例子;
public class BufferedTest {
public static void main(String[] args) {
BufferedReader bfr = null;
BufferedWriter bfw = null;
try {
File file = new File("doupo.txt");
File file1 = new File("zsmc1.txt");
FileReader flr = new FileReader(file);
FileWriter flW = new FileWriter(file1);
bfr = new BufferedReader(flr);
bfw = new BufferedWriter(flW);
char[] cubf = new char[10];
int read = bfr.read(cubf);
while (read != -1){
bfw.write(cubf, 0 , read);
read = bfr.read(cubf);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bfr != null){
try {
bfr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bfw != null){
try {
bfw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
关于缓冲流提高效率的原因;
源码展示;
Creates a buffering character-input stream that uses a default-sized input buffer.
Params:
in – A Reader
public BufferedReader(Reader in) {
this(in, defaultCharBufferSize);defaultCharBufferSize = 8192
}
原理上缓冲流创建了一个缓冲区,当数据进入时会先保存在缓冲区内,当达到了缓冲区的要求时在写到需要写入的文件以达到更高的效率
(BufferedWriter有一个flush();操作可以将当前缓冲区的数据写出并且刷新,因为write();方法中使用了flush();所以不用手动调用)
BufferedInputStraem和BufferedOutputStraem就不举例了其实和字符型一样就是文件不同罢了