缓冲流相比较基本流效率更高,因为自带长度的8192缓冲区
缓冲流在io体系中的的位置:
字节缓冲流:
缓冲流的构造方法:输入、输出
**先通过一个练习了解字节缓冲流
两个写法:
//创建缓冲流对象
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("..\\ioDemo\\c.txt"));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("..\\ioDemo\\e.txt"));
//拷贝(一次拷贝一个字节)
int b;
while((b=bis.read())!=-1){
bos.write(b);
}
//关流
bos.close();
bis.close();
//创建缓冲流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("..\\ioDemo\\c.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\ioDemo\\e.txt"));
//拷贝(一次拷贝一个数组)
int len;
byte[] bytes = new byte[1024];//一次读写的字节个数
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
//关流
bos.close();
bis.close();
源文件:
目的文件:
分析:
一次读取一个字节的情况:变量b起着中间人的作用
一次读取一个字节数组的情况
实际操作的是基本流
使得数据的传输都在内存内进行,减少了内存和硬盘之间的交互时间
字符缓冲流:
**字符流的缓冲区(字节数组),而字符缓冲流的缓冲区是(字符数组)
,使用字符缓冲流提升的效率不多,使用它主要是他有两个特有方法
缓冲流的构造方法:输入、输出
**注意参数
字符缓冲输入流
特有方法:
可使用 会返回null的特性,来循环读取数据
代码演示:
/**字符缓冲输入流
* BufferedReader
* readLine
*/
BufferedReader br=new BufferedReader(new FileReader("..\\ioDemo\\f.txt"));
//循环读取
//细节:遇到回车换行会停止但不会读取到回车换行
String str ;
while ((str= br.readLine())!=null){
System.out.println(str);
}
br.close();
控制台:
字符缓冲输出流
特有方法:
WINDOWS—/r/n
Linux—/n
Mac—/r
代码演示:
/**
* 字符缓冲输出流
* BufferedWirter
*newLine跨平台的换行 -----Windows/r/n -----linux/n Mac/r
*/
BufferedWriter bw = new BufferedWriter(new FileWriter("..\\ioDemo\\g.txt"));
bw.write("123");
bw.newLine();
bw.write("木头人");
bw.newLine();
bw.close();