本帖最后由 戴振良 于 2012-4-21 02:57 编辑
- package com.itheima;
- import java.io.*;
- public class NewTxt {
-
- public static void main(String[] args) throws Exception {
-
- File f = new File("D:\\java\\abc.txt");
- FileReader fr = new FileReader(f) ;
- FileWriter fw = new FileWriter("D:\\java\\def.txt");
- BufferedReader br = new BufferedReader(fr,1000);
- BufferedWriter bw = new BufferedWriter(fw,1000);
-
- char[] buf = new char[(int)f.length()];
- int len = 0;
- len = br.read(buf);
- br.close();
-
- bw.write(buf,0,len);
- bw.close();
- }
- }
复制代码 本来可以直接使用FileReader和FileWriter来直接进行文本文件的读取和保存做作的,但是这里使用了BufferedReader和BufferedWriter来包装它们,我查看了一下JDK,其中BufferedReader的说明如下(红色文字):
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
问题1、请问这个BufferedReader/BufferedWriter的默认缓冲区是多大?
问题2、在上面的例子中,我指定了它们的缓冲区大小为1000,我查了JDK,那里说这个参数是int型的,那我输入1000,到底是多大呢?单位是什么?
问题3、请结合上面的例子,假如我直接用FileReader/FileWriter这两个类来读取操作是怎么样的一个原理。
而使用BufferedReader/BufferedWriter这个两个类包装FileReader/FileWriter之后进行读取又是怎么样的原理,它是加了缓冲,是怎么个缓冲法? |