|
本帖最后由 xmubingo 于 2012-3-28 13:55 编辑
hsc 发表于 2012-3-28 12:01
第一次:6.155s
第二次:5.843s第一次:0.486s
第二次:0.495s
晕!
BufferedReader是自带缓冲区的,可以通过参数设置缓冲区的大小,BufferedReader(Reader, int size),你把它设置成8*1024bytes.
而RandomAccessFile是不带缓冲区的。
你就每次
while(没有读完){
读8bytes数据
写8bytes数据
}
每次读的是8bytes不是8*1024bytes也不是8*1024char.
你现在每次读的是8KB,相当于BufferedReader没有发挥缓冲区的价值,反而还要浪费时间在填充缓冲区上,当然时间多了。
读1275KB的文件效果!- package test;
- import java.io.*;
- public class testforbuffer {
- public static void main(String[] args) throws Exception
- {
- BufferedReader br = new BufferedReader(new FileReader("c:\\testin.txt"),8*1024);//缓冲区大小8*1024byte
- BufferedWriter bw=new BufferedWriter(new FileWriter("c:\\testout.txt"));
- int count;
- char[] buffer=new char[4];//用char读8byte
- Long startTime = System.currentTimeMillis();
- while((count=br.read(buffer))!=-1)
- {
- //System.out.println(count);
- if(count!=buffer.length)
- {
- char[] t=new char[count];
- for(int i=0;i<count;++i)
- {
- t[i]=buffer[i];
- }
- bw.write(t);
- }
- else bw.write(buffer);
- }
- bw.flush();
- bw.close();
- br.close();
- Long endTime = System.currentTimeMillis();
- System.out.println("Totle time is "+ (endTime - startTime) + "milliseconds");
-
- //////////////////////////////////////////////////////////////
-
- RandomAccessFile read = new RandomAccessFile("c:\\testin.txt","r");
- RandomAccessFile writer = new RandomAccessFile("c:\\testout.txt","rw");
- byte[] b = new byte[8];//读8byte
- startTime = System.currentTimeMillis();
- while((count=read.read(b))!=-1)
- {
- //System.out.println(count);
- if(count!=b.length)
- {
- byte[] t=new byte[count];
- for(int i=0;i<count;++i)
- t[i]=b[i];
- writer.write(t);
- }
- else writer.write(b);
- }
- writer.close();
- read.close();
- endTime = System.currentTimeMillis();
- System.out.println("Totle time is "+ (endTime - startTime) + "milliseconds");
- }
- }
复制代码 输出:
Totle time is 43milliseconds
Totle time is 871milliseconds
BufferedReader只要43毫秒。RandomAccessFile要871毫秒。
缓冲区就是这个作用啊!当你读的东西比较小,比如读一行的时候,我就不需要再向硬盘要数据,而是向内存直接取。这就是为什么我们实验室要用BufferedReader,因为我们都是处理一行行。苍天啊...还要我怎么解释。
|
|