Java的字节缓冲流与字符缓冲流解析
更新时间:2023年11月01日 09:43:24 作者:追光而遇
这篇文章主要介绍了Java的字节缓冲流与字符缓冲流解析,Java 缓冲流是Java I/O库中的一种流,用于提高读写数据的效率,它通过在内存中创建缓冲区来减少与底层设备的直接交互次数,从而减少了I/O操作的开销,需要的朋友可以参考下
高级流
- 缓冲流
- 转换流
- 序列化流
- 打印流
- 压缩流
- Commons-io

缓冲流
基本流的效率太慢了,都加上缓冲区

字节缓冲流
原理:底层自带了长度为8192的缓冲区提高性能
| 方法名称 | 说明 |
| public BufferedInputStream(InputStream is) | 把基本流包装成高级流,提高读取数据的性能 |
| public BufferedOutputStream(OutputStream os) | 把基本流包装成高级流,提高读取数据的性能 |
练习:拷贝文件
- 利用字节缓冲流拷贝文件(一次读写一个字节)
public class BufferedStreamDemo1 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/Users/jessy/Desktop/offer50/aaa/aaacopy.txt"));
int b;
while ((b = bis.read()) != -1) {
bos.write(b);
}
bos.close();
bis.close();
}
}
- 利用字节缓冲流拷贝文件(一次读写一个字节数组)
public class BufferedStreamDemo2 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("/Users/jessy/Desktop/offer50/aaa/aaacopy.txt"));
byte[] bytes = new byte[1024];
int len;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
bos.close();
bis.close();
}
}
字节缓冲流提高效率的原理

字符缓冲流
原理:底层自带了长度为8192的缓冲区提高性能
| 方法名称 | 说明 |
| public BufferedReader(Reader r) | 把基本流变成高级流 |
| public BufferedWriter(Writer r) | 把基本流变成高级流 |
- 特有方法
| 字符缓冲输入流特有方法 | 说明 |
| public String readLine() | 读取一行数据,如果没有数据可读了,会返回null |
- 细节:
- readLine方法在读取的时候,一次读一整行,遇到回车换行结束
- 但是他不会把回车换行读到内存当中
| 字符缓冲输出流特有方法 | 说明 |
| public void newLine() | 跨平台的换行 |
public class BufferedStreamDemo3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("/Users/jessy/Desktop/offer50/aaa/aaa.txt"));
String line;
while (((line = br.readLine()) != null)) {
System.out.println(line);
}
br.close();
}
}
public class BufferedStreamDemo4 {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/jessy/Desktop/offer50/aaa/b.txt", true));
bw.write("朵朵是猫猫呀!!");
//换行
bw.newLine();
bw.write("可是你不是猫猫!");
bw.newLine();
bw.close();
}
}
总结
- 缓冲流有几种?
- 字节缓冲输入流 BufferedInputStream
- 字节缓冲输出流 BufferedOutputStream
- 字符缓冲输入流 BufferedReader
- 字符缓冲输出流 BufferedWriter
- 缓冲流为什么能提高性能
- 缓冲自带长度为8192的缓冲区
- 可以显著提高字节流的读写性能
- 对于字符流提升不明显,对于字符缓冲流而言关键点是两个特有方法
- 字符缓冲流两个特有方法是什么?
- 字符缓冲输入流BufferedReader :readLine()
- 字符缓冲输出流 BufferedWriter:newLine()
到此这篇关于Java的字节缓冲流与字符缓冲流解析的文章就介绍到这了,更多相关Java的字节字符缓冲流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
windows10 JDK安装及配置环境变量与Eclipse安装教程
这篇文章主要介绍了windows10 JDK安装及配置环境变量与Eclipse安装,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-10-10
如何解决java.net.BindException:地址已在使用问题
当Zookeeper启动报错“java.net.BindException:地址已在使用”时,通常是因为指定的端口已被其他进程占用,解决这个问题需要按照以下步骤操作:首先,使用命令如lsof -i:2181找到占用该端口的进程号;其次,使用kill命令终止该进程2024-09-09
Spring Cloud Ribbon实现客户端负载均衡的示例
本篇文章主要介绍了Spring Cloud Ribbon实现客户端负载均衡的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-02-02
关于SpringBoot集成Lettuce连接Redis的方法和案例
这篇文章主要介绍了关于SpringBoot集成Lettuce连接Redis的方法和案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-04-04
MybatisPlus #{param}和${param}的用法详解
这篇文章主要介绍了MybatisPlus #{param}和${param}的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09


最新评论