欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 读取大数据文件,处理大数据文件性能比较? 博客分类: Java javaioscannerLineIteratorFileUtils

程序员文章站 2024-03-16 19:07:28
...
通过使用java提供的io,scanner类,apache提供的api处理大文件数据性能分析比较,代码如下:

package test;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.util.Random;
import java.util.Scanner;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.junit.Test;

public class TestFile {
	
	//@Test
	//造数据,测试下面各个方法读取数据性能
	public void makeFile() throws IOException
	{
		File file = new File("D:\\phone.txt");
		
		OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
		
		//2百万
		for(int i=0; i < 2000000; i++)
		{
			bw.write(bulidPhone());
			bw.newLine();
		}
		
		bw.close();
		os.close();
	}
	
	//生成字符串
	private String bulidPhone()
	{
		Long lo = new Random().nextLong();
		return String.valueOf(lo);
	}
	
	/**
	 * @Title: readTxt1
	 * @Description: 使用常规的jdk的io解析输出文件数据
	 * @throws IOException 
	 */ 
	@Test
	public void readTxt1() throws IOException
	{
		long start = System.currentTimeMillis();
		File file = new File("D:\\phone.txt");
		Reader in = new FileReader(file);
		BufferedReader br = new BufferedReader(in);
		while(br.ready())
		{
			//System.out.println(br.readLine());
			br.readLine();
		}
		
		in.close();
		br.close();
		long end = System.currentTimeMillis();
		System.out.println("readTxt1方法,使用内存="+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())+",使用时间毫秒="+(end-start));
	}
	
	/**
	 * @Title: readTxt2
	 * @Description: 使用Scanner扫面文件解析文件数据
	 * @throws IOException 
	 */ 
	@Test
	public void readTxt2() throws IOException
	{
		long start = System.currentTimeMillis();
		File file = new File("D:\\phone.txt");
		InputStream is = new FileInputStream(file);
		Scanner scan = new Scanner(is,"UTF-8");
		
		while(scan.hasNextLine())
		{
			//System.out.println(scan.nextLine());
			scan.nextLine();
			//scan.next();
		}
		
		is.close();
		scan.close();
		
		long end = System.currentTimeMillis();
		System.out.println("readTxt2方法,使用内存="+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())+",使用时间毫秒="+(end-start));
	}
	
	/**
	 * @Title: readTxt3
	 * @Description: 使用org.apache.commons.io.FileUtils,apache工具类解析文件
	 * @throws IOException 
	 */ 
	@Test
	public void readTxt3() throws IOException
	{
		long start = System.currentTimeMillis();
		File file = new File("D:\\phone.txt");
		
		LineIterator it = FileUtils.lineIterator(file, "UTF-8");
		
		while(it.hasNext())
		{
			it.next();
		}
		
		it.close();
		
		long end = System.currentTimeMillis();
		System.out.println("readTxt3方法,使用内存="+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())+",使用时间毫秒="+(end-start));
	}
}


运行结果如下:
java 读取大数据文件,处理大数据文件性能比较?
            
    
    博客分类: Java javaioscannerLineIteratorFileUtils

通过分析比较:
1.apache的api处理时间最短,但是消耗的内存比jdk的io多。
2.scanner类表现的最差,销售内存高,时间久。
3.传统的jdk的io处理时间稍长,内存消耗低。


  • java 读取大数据文件,处理大数据文件性能比较?
            
    
    博客分类: Java javaioscannerLineIteratorFileUtils
  • 大小: 9.9 KB