理解不了BufferedReader的大小有什么作用?

FileReaderfr=newFileReader("1.txt");BufferedReaderbr=newBufferedReader(fr,1);Strings=... FileReader fr = new FileReader("1.txt");
BufferedReader br = new BufferedReader(fr,1);

String s = br.readLine();
System.out.println(s);
// 为什么输出结果不止一个字符,不是限制了缓冲区的大小吗?
展开
 我来答
夜来雨早来晴
推荐于2016-03-26 · TA获得超过3.1万个赞
知道大有可为答主
回答量:9110
采纳率:60%
帮助的人:818万
展开全部
1、java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

2、从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。

3、System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

下面的示例示范了BufferedReader和BufferedWriter的使用。可以在文字模式下输入字符,程序会将输入的文字存储至指定的文件中,如果要结束程序,输入quit字符串即可。
Java代码 :
package ysu.hxy;
import java.util.*;
import java.io.*;

public class BufferedReaderWriterDemo {
public static void main(String[] args) {
try {
//缓冲System.in输入流
//System.in是位流,可以通过InputStreamReader将其转换为字符流
BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
//缓冲FileWriter
BufferedWriter bufWriter = new BufferedWriter(new FileWriter(args[0]));
String input = null;
//每读一行进行一次写入动作
while(!(input = bufReader.readLine()).equals("quit")) {
bufWriter.write(input);
//newLine()方法写入与操作系统相依的换行字符,依执行环境当时的OS来决定该输出那种换行字符
bufWriter.newLine();
}
bufReader.close();
bufWriter.close();
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("没有指定文件");
} catch(IOException e) {
e.printStackTrace();
}
}
}
//运行后会在目录下产生一个文件test2.txt,并在其中写入刚才输入的内容。
wlxit
推荐于2017-11-24 · 超过19用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:50.7万
展开全部
这个同学你好,首先不得不说你还没理解什么叫缓冲区,缓冲区就是一个像水池的东西,往水池里放水,放满后,一次性取走,而不是放一勺取一次。减少了运水的次数。在IO读写中也是一样的,先读到缓冲区里,然后一次性拿过来用,缓冲区大小不是决定读写的数量。你给1个大小 ,那程序就读一个取一次。
更多追问追答
追问
也就是说给1的大小,就成了放一勺取一次?能说的得详细点吗?初学,谢谢。确实没完全理解到什么叫缓冲区.
追答
你说的对,给1就相当于放一勺取一次,其实这样是没有必要的,因为在IO操作中读是很快的,但是把读到的传给程序使用这个过程是比较慢的,这样计算机就会读一个然后等后面的转移的过程,等全部都处理完,它就再读一个,大家都知道这样肯定不如读取多一点一次走后面的步骤,后面有什么操作具体我也不是太清楚,那一部分也和缓冲没有什么关系。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daay1986
2011-11-29 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1476万
展开全部
缓冲是能大能小才叫缓冲,你都固定大小了还能有缓冲作用吗?大小都固定了,就不用写这样的类了,用数组就可以了。你所给的大小只是一个初始值,一个建议值,这只是为了提高效率而言的,如果你数据流不大,你设置一个合适的预期值,那么在使用的时候就会减少扩大缓冲区带来的额外消耗。这才是这个初始值的目的。
追问
意思就是这东西,其实不常用?一般用默认就OK了?固定了大小其实和没固定大小没什么区别?如果超过这个规定值,就会自动增长?
追答
大多数时候不常用,一般默认就可以了,使用默认和不默认区别是有的,在系统资源有限的紧迫的时候就很重要了,当然这个是在高级应用的时候才需要,不管有没有默认值只要超过长度就会自动增加,但是这个增加是需要额外的花费的。如果频繁增加更加影响效率。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式