`

java读取大数据文件性能比较

    博客分类:
  • java
 
阅读更多

通过使用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));
	}
}

 运行结果如下:


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

分享到:
评论

相关推荐

    FastCSV:用于 Java 的高性能 CSV 读取器和写入器

    用于大规模读写数据的大数据应用 需要轻量级库的小数据应用程序 基准 从项目中选择的基准。 与其他一些流行的、无依赖的小型(&lt; 100 KB)库相比。 特征 应用程序接口 超快 占地面积小 零运行时依赖 无空 CSV ...

    大数据的存储管理技术.doc

    HDFS采用了冗余数据存储,增强了数据可靠性,加快了数据传输速度,除此 之外,HDFS还具有兼容的廉价设备、流数据读写、大数据集、简单的数据模型、强大的 跨平台兼容性等特点。但HDFS也存在着自身的不足,比如不适合...

    大数据-Inceptor技术白皮书.pdf

    HDFS仍然是一个高可扩展的分布式文件系统,是大数据软件栈的基 石。Map/Reduce在处理PB级别的数据时,仍然具有高容错性、高吞吐量的特点。但由于复杂的工作流通常需 要多个阶段的Map/Reduce任务,而Map/Reduce的输入...

    java源码生成jar包-hudi:大数据的更新、删除和增量处理

    java源码生成jar包阿帕奇胡迪 Apache Hudi(发音为 Hoodie)代表Hadoop Upserts Deletes and Incrementals 。 Hudi 管理 DFS(云存储、HDFS 或任何 Hadoop 文件系统兼容存储)上的大型分析数据集的存储。 特征 ...

    Java版水果管理系统源码-flume-kafka-storm:大数据实时计算的基础框架

    首先,kafka的开发者们认为不需要在内存里缓存什么数据,操作系统的文件缓存已经足够完善和强大,只要你不搞随机写,顺序读写的性能是非常高效的。kafka的数据只会顺序append,数据的删除策略是累积到一定程度或者...

    FlinkTutorial:从基础入门,概念,原理,实战,性能调优,子程序解析等内容,使用Java开发,同时包含Scala部分核心代码。

    与kafka,mysql,redis,http,elasticsearch从容错分析析:StateBackend,checkpoint从数据流向角度分析数据源socket通信,本地创建数据,从磁盘文件,从Kafka消息中间件中读取转换操作map :取一个元素并生产一个...

    hudi:大数据的增量和增量处理

    阿帕奇·胡迪 Apache Hudi(发音为Hoodie)代表Hadoop Upserts Deletes and ... 读取优化查询-通过纯列存储(例如 )提供出色的快照查询性能。 通过了解有关Hudi的更多信息 从源代码构建Apache Hudi 构建Apach

    redis-linux-7.2.1

    redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不...

    Hadoop权威指南(中文版)2015上传.rar

    文件读取剖析 文件写入剖析 一致模型 通过 distcp并行拷贝 保持 HDFS 集群的均衡 Hadoop的归档文件 使用Hadoop归档文件 不足 第4章 Hadoop I/O 数据完整性 HDFS的数据完整性 LocalFileSystem ChecksumFileSystem ...

    Redis-win64-5.0.14.1

    redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不...

    Pistachio:低延迟、强一致性、容错分布式键值存储。 托管数据和计算以实现最佳性能的云计算

    超过 10 亿个用户配置文件以约 200 万次读取 QPS 和约 50 万次写入 QPS 被存储。 它保证了强一致性和容错性。 我们在全球 8 个数据中心拥有数百台服务器。 重新发明大数据云计算的存储系统 数据局部性是云计算性能...

    ssh(structs,spring,hibernate)框架中的上传下载

    Tfile的Hibernate映射文件Tfile.hbm.xml放在Tfile .java类文件的相同目录下:  代码 2 领域对象映射文件 1. 2. !DOCTYPE hibernate-mapping PUBLIC 3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4. ...

    python数据分析随书代码

    5.5 使用pandas读写Excel文件 120 5.6 使用REST Web服务和JSON 123 5.7 使用pandas读写JSON 124 5.8 解析RSS和Atom订阅 126 5.9 使用Beautiful Soup解析HTML 127 5.10 小结 134 第6章 数据可视化 136 6.1 ...

    Hbase中文文档

    2.6. 配置文件 2.7. 配置示例 2.8. 重要配置 2.9. Bloom Filter 3. 升级 3.1. 从HBase 0.20.x or 0.89.x 升级到 HBase 0.90.x 3.2. 从 0.90.x 到 0.92.x 4. The HBase Shell 4.1. 使用脚本 4.2. Shell 技巧 5. 数据...

Global site tag (gtag.js) - Google Analytics