缓冲流


字节缓冲流

构造方法
| 方法名称 | 说明 |
|---|---|
public BufferedInputStream(InputStream is) | 将基本输入流包装为高级流,提升数据读取性能 |
public BufferedOutputStream(OutputStream os) | 将基本输出流包装为高级流,提升数据写出性能 |
底层原理
字节缓冲流的性能提升依赖底层自带的长度为 8192 的缓冲区。
样例
一次读一个字节
public class BufferedStreamDemo1 {
public static void main(String[] args) throws IOException {
//1.创建缓冲流的对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myio\\a.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy.txt"));
//2.循环读取并写到目的地
int b;
while ((b = bis.read()) != -1) {
bos.write(b);
}
//3.释放资源
bos.close();
bis.close();
}
}

一次多个字节
//1.创建缓冲流的对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myio\\a.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy2.txt"));
//2.拷贝(一次读写多个字节)
byte[] bytes = new byte[1024];
int len;
while((len = bis.read(bytes)) != -1){
bos.write(bytes,0,len);
}
//3.释放资源
bos.close();
bis.close();

字符缓冲流

构造方法
| 方法名称 | 说明 |
|---|---|
public BufferedReader(Reader r) | 将字符基本输入流包装为高级字符缓冲流 |
public BufferedWriter(Writer r) | 将字符基本输出流包装为高级字符缓冲流 |
底层原理
字符缓冲流的性能提升依赖底层自带的长度为 8192 的缓冲区。
字符缓冲输入流(BufferedReader)特有方法
| 方法名称 | 说明 |
|---|---|
public String readLine() | 读取一行数据;若无可读数据,返回null |
| 方法名称 | 说明 |
|---|---|
public void newLine() | 实现跨平台的换行操作(适配不同系统的换行规则) |
//1.创建字符缓冲输入流的对象
BufferedReader br = new BufferedReader(new FileReader("myio\\a.txt"));
//2.读取数据
//细节:
//readLine方法在读取的时候, 一次读一整行, 遇到回车换行结束
// 但是他不会把回车换行读到内存当中
/*
String line1 = br.readLine();
System.out.println(line1);
String line2 = br.readLine();
System.out.println(line2);*/
String line;
while (((line = br.readLine()) != null)){
System.out.println(line);
}
此处写入什么值传出什么值
//1.创建字符缓冲输出流的对象
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt", append: true));
//2.写出数据
bw.write("123");
bw.newLine();//写入换行
bw.write("456");
bw.newLine();
//3.释放资源
bw.close();
总结
- 缓冲流的种类
- 字节缓冲输入流:
BufferedInputStream - 字节缓冲输出流:
BufferedOutputStream - 字符缓冲输入流:
BufferedReader - 字符缓冲输出流:
BufferedWriter
- 缓冲流提升性能的原因
- 自带长度为 8192 的缓冲区
- 显著提高字节流的读写性能;对字符流性能提升不明显,但字符缓冲流有特有方法
- 字符缓冲流的特有方法
- 字符缓冲输入流(
BufferedReader):readLine()(读取一行数据,无数据时返回null) - 字符缓冲输出流(
BufferedWriter):newLine()(跨平台换行)
1297

被折叠的 条评论
为什么被折叠?



