(Java)BufferedReader简述

文档中关于BufferedReader的描述为:

Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.

The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders. For example,

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
 

will buffer the input from the specified file. Without buffering, each invocation of read() or readLine() could cause bytes to be read from the file, converted into characters, and then returned, which can be very inefficient.

Programs that use DataInputStreams for textual input can be localized by replacing each DataInputStream with an appropriate BufferedReader.

翻译过来是:从字符输入流中读取文本,缓冲字符,以便有效地读取字符、数组和行。

可以指定缓冲区大小,也可以使用默认大小。默认值对于大多数用途来说都足够大。

通常,每个读卡器发出的读请求都会导致相应的读请求由底层字符或字节流发出。因此,建议将bufferedreader包装在任何read()操作可能代价高昂的读卡器上,如filereaders和inputstreamreaders

栗子1:BufferedReader in = new BufferedReader(new FileReader("foo.in"));

栗子2:BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

BufferedReader有几个方法,其中就有String 类型的readLine(),Reads a line of text.意思是读取一行的文本,在system.in中,是直接读取的方式,操作者写入一个字符,系统就读一个字符,这样效率是非常低的,使用readLine()方法就可以做到一次读出操作者在输入换行符之前的一行字符,读取一行文本。行被认为是由换行符(“\n”)、回车符(“\r”)或紧跟换行符的回车符中的任何一个终止的。返回包含行内容(不包括任何行终止字符)的字符串,如果已到达流的结尾,则为空。int类型的read()方法返回的则是以0到65535(0x00-0xffff)范围内的整数形式读取的字符,如果已到达流的结尾,则为-1。例如:输入1则输出的就是49

下面解释一下inputstreamreader:

inputstreamreader是从字节流到字符流的桥梁:它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式给定,或者可以接受平台的默认字符集。每次调用一个inputStreamReader的read()方法都可能导致从底层字节输入流读取一个或多个字节。为了能够有效地将字节转换为字符,可以从基础流中提前读取的字节数可能超过满足当前读取操作所需的字节数。为了获得最高的效率,考虑在BufferedReader中包装一个InputStreamReader。

例如:BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

总的来说,就是,system.in是一个字节流,需要使用inoutstream将其转换为字符流,然后使用bufferreader读入字符,放入缓冲区,利用readln方法从缓冲区一次读取输入的一行数据

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值