java缓存读取文件的例子

缓存和缓冲不同,缓存是用在多次操作时,他要占用比较大的内存,保存一些存取费时的但比较常用的数据。
以下是对文件读取使用缓存
缓存类Cache.java
package useBuffer;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Cache {
	private ArrayList list = new ArrayList();  //保存从文件中读取的内容
	public Cache(File file){
		try {
			FileReader fr = new FileReader(file);
			BufferedReader br = new BufferedReader(fr);
			String line ;
			while((line = br.readLine())!=null){
				list.add(line);
			
			}
			br.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public String getLine(int n){
		if(n<0)return null;
		return (String) ((n<list.size())? list.get(n):null);
	}
}

测试类:
package useBuffer;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CacheTest {

	private Cache cache;
	public static void main(String[] args) {

		CacheTest t = new CacheTest();
		File file = new File("E:\\Eclipse workspace\\DataStructSample\\src\\useBuffer\\BufferTest.java");
		long start = System.currentTimeMillis();
		t.search1(file, "//.+");   //匹配注释
		System.out.println("没有用缓存耗时:"+(System.currentTimeMillis()-start)+"MS");
		
		start = System.currentTimeMillis();
		t.search2(file, "//.+");   //匹配注释
		System.out.println("用缓存耗时:"+(System.currentTimeMillis()-start)+"MS");
	}

	public void search1(File file,String pattern){  //不使用缓存
		try {
			FileReader fr = new FileReader(file);
			BufferedReader br = new BufferedReader(fr);
			String line;
			Pattern searched = Pattern.compile(pattern);
			Matcher lm;
			int lines = 0; //记录注释行数
			while((line = br.readLine())!=null){
				lm = searched.matcher(line);
				if(lm.find()) lines ++;
			}
			System.out.println(lines);
			br.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public void search2(File file,String pattern){ //使用缓存,
			
		if(cache==null)
			cache = new Cache(file);
			String line;
			Pattern searched = Pattern.compile(pattern);
			Matcher lm;
			int i = 0;
			int lines = 0;
			while((line = cache.getLine(i++))!=null){
				lm = searched.matcher(line);
				if(lm.find()) lines ++;
			}
			System.out.println(lines);
		
	}
	
	
	
}

在运行一次或者输入文件较小时,差别不大

你可能感兴趣的:(java,eclipse,cache)