JAVA IO之缓冲

2020-11-26  本文已影响0人  engineer_tang

1. BufferedWriter和BufferedReader

1.1 BufferedReader类

从JDK 1.1 开始引入该类,从字符输入流中读取文本,缓冲字符,以便有效地读取字符、数组和行。
可以指定缓冲区大小,也可以使用默认大小。对于大多数目的来说,默认值足够大。
一般来说,读卡器发出的每个读请求都会导致对底层字符或字节流发出相应的读请求。因此,建议在读操作可能很昂贵的任何读取器(如FileReader和InputStreamReaders)周围包装一个BufferedReader。
用法:

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

将缓冲指定文件中的输入。如果没有缓冲,每次调用read()或readLine()都可能导致从文件中读取字节,将其转换为字符,然后返回,这可能非常低效。

使用DataInputStreams进行文本输入的程序可以通过用适当的BufferedReader替换每个DataInputStream来本地化。

1.2 BufferedWriter类

将文本写入字符输出流,缓冲字符以便有效地写入单个字符、数组和字符串。
可以指定缓冲区大小,也可以接受默认大小。对于大多数目的来说,默认值足够大。

提供了一个newLine方法,它使用平台自己的行分隔符概念(由系统属性<tt>行分隔符</tt>。并非所有平台都使用换行符('\n')来终止行。因此,与直接编写换行符相比,调用此方法终止每个输出行更可取。

通常,一个Writer对象会立即将其输出发送到底层字符或字节流。除非需要及时输出,否则建议将BufferedWriter包装在任何Writer 上,如果直接调Writer的write方法操作可能很昂贵的,例如filewriter和OutputStreamWriters。
用法:

PrintWriter out  = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

将把PrintWriter的输出缓冲到文件中。如果没有缓冲,每次调用print()方法都会导致字符被转换成字节,然后立即写入文件,这可能会非常低效。

2. BufferedInputStream和BufferedOutputStream

2.1 BufferedInputStream类

BufferedInputStream在另一个输入流增加了功能,即缓冲输入并支持“标记”和“重置”方法的能力。创建BufferedInputStream时,将创建一个内部缓冲区数组。当读取或跳过流中的字节时,根据需要从包含的输入流重新填充内部缓冲区,一次填充多个字节。标记操作会记住输入流中的一个点,重置操作会在从包含的输入流获取新字节之前,重新读取最近的标记操作以来读取的所有字节。

2.2 BufferedOutputStream类

该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节都引起对底层系统的调用。

上一篇 下一篇

猜你喜欢

热点阅读