Java的字节缓冲流与字符缓冲流解析
作者:追光而遇
这篇文章主要介绍了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的字节字符缓冲流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!