浅谈缓冲字符流 BufferedReader BufferedWriter用法

网友投稿 956 2022-12-26

浅谈缓冲字符流 BufferedReader BufferedWriter用法

浅谈缓冲字符流 BufferedReader BufferedWriter用法

缓冲字符流Bufhttp://feredReader和BufferedWriter

问题:

之前的文件读写都是按照字节、字符或者数组来实现的,对于文本文件而言,能否按照行,一行行读写呢。

提供了BufferedReader和BufferedWriter实现按行读写

package com.bjsxt.ios3;

import java.io.*;

public class TestBufferedReaderWriter {

public static void main(String[] args) throws IOException {

//1.创建流

BufferedReader br =

new BufferedReader(new FileReader("c:/RecorderSDKLog.txt"));

BufferedWriter bw =

new BufferedWriter(new FileWriter("c:/RecorderSDKLog2.txt"));

//2.使用流

String str = br.readLine();

while(str != null){

//输出当前行数据

System.out.println(str);

//写当前行数据到文件

bw.write(str);

//bw.write("\n");

bw.newLine();

//再读一行

str = br.readLine();

}

//3.关闭流

br.close();

bw.close();

}

}

总结1:BufferedReader和BufferedWriter的优点

1.速度快

2.简化编程

总结2:readLine()底层的原理

底层还是一个一个字符的读取,append()放入到StringBuilder(或者char[] )中,遇到换行符 ,将StringBuilder(char[])转换成String并返回

总结3:不同的操作系统中换行符是不同的

Unix系统里,每行结尾只有“<换行>”,即“\n”;

Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;

Mac系统里,每行结尾是“<回车>”,即“\r”。

BufferedReader和BufferedWriter 性能较好的原因

原理:

BufferedReader会一次性从物理流中读取8k(默认数值,可以设置)字节内容到内存,如果外界有请求,就会到这里存取,如果内存里没有才到物理流里再去读。即使读,也是再8k。

而直接读物理流,是按字节来读。

对物理流的每次读取,都有IO操作。IO操作是最耗费时间的。

BufferedReader就是减少了大量IO操作,而为你节省了时间。

简单的说,一次IO操作,读取一个字节也是读取,读取8k个字节也是读取,两者花费时间相差不多。而一次IO的来回操作却要耗费大量时间。

好比是一辆大型汽车(设装100人),要去车站接人到公司,接一个人也是接,接100个人也是接,而时间一样。显然,接100个人最划算。

物理流就是一次一个字节(一个人)

Buffered就是一次8k个字节(100个人)

对于读取定长字节文件,当然BufferedReader更快了!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:葫芦岛一体化政务服务平台(葫芦岛市政府门户网站)
下一篇:从零开源flutter(开源零代码平台)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~