`
zx_code
  • 浏览: 98953 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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处理时间稍长,内存消耗低。


  • 大小: 9.9 KB
4
3
分享到:
评论
2 楼 giraffeql 2016-02-18  
spiniper 写道
你这三段代码根本就没可比性。

why?
1 楼 spiniper 2016-02-18  
你这三段代码根本就没可比性。

相关推荐

    Java写入大数据文件

    sqlitFileDate方法使用FileReader和BufferedReader来读取大数据文件,并使用LinkedList来存储文件流对象和BufferedWriter对象,然后将每个小文件的数据写入到对应的文件中。 在写入和切分文件操作完成后,程序使用...

    java:大数据文件写入,读取,分割,排序,合并

    java:大数据文件写入,读取,分割,排序,合并

    java的大数据读写

    总的来说,"java的大数据读写"涵盖了Java语言在大数据环境下的核心能力,包括高效文件操作、内存管理、数据排序以及性能优化策略。通过学习这些知识点,开发者可以构建能够处理大规模数据的可靠系统。

    java对大数据HDFS文件操作

    在实际应用中,还需要考虑错误处理、文件权限、性能优化等因素,确保程序的稳定性和效率。总之,掌握Java对HDFS的操作是大数据开发者的必备技能之一,能够有效地利用Hadoop集群存储和处理大规模数据。

    Java及大数据相关的一些代码

    这个压缩包“Java及大数据相关的一些代码”包含了一系列与Java编程和大数据处理相关的源代码示例,旨在帮助开发者逐步理解并掌握相关技术。 首先,让我们深入探讨Java编程语言的基础。Java是一种面向对象的、跨平台...

    java对大数据的处理.pdf

    总结起来,Java在处理大数据时,主要采用了分批读取、批量入库、多线程并行处理和线程池管理等策略。这些技术能够有效优化内存使用,提高处理效率,同时防止服务器过载。在实际应用中,需要根据服务器配置和数据量...

    java 大数据导出csv小工具

    标题中的“java 大数据导出csv小工具”指的是一个基于Java编程语言开发的应用程序,其主要功能是将大量数据转换并导出为CSV(逗号分隔值)格式的文件。CSV是一种通用的文件格式,广泛用于数据交换,因为它可以被...

    java io读取文件

    下面我们将深入探讨Java IO读取文件的技术及其在大数据场景下的应用。 1. **基础概念** - **流(Stream)**:Java IO基于流的概念,流是一组有序的数据序列,可以是字节流或字符流。数据从源(如文件)流向目的地...

    Java读取大数据量Excel的方法(POI)

    在Java编程中,处理大数据量的Excel文件是一项挑战,因为Excel文件可能包含成千上万行数据。Apache POI是一个流行的库,专为处理Microsoft Office文档(如Excel)而设计,它提供了API来读取、写入和修改这些文件。在...

    javaExcel大数据导出

    "javaExcel大数据导出"这个话题涉及到的主要知识点包括:Java与Excel的交互、大数据处理策略、性能优化以及内存管理。 1. **Java与Excel的交互**: Java可以通过多种库来实现与Excel的交互,如Apache POI、...

    javaExcel大数据导出.zip

    在Java编程环境中,处理大数据并将其导出到Excel文件是一项常见的任务,特别是在数据分析、报表生成以及数据交换等场景。"javaExcel大数据导出.zip"这个压缩包可能包含了一个或多个示例项目,演示了如何在Java中高效...

    java对大数据量文件内容的多线程读取和排序.zip_大数据 java_文件读取

    在Java编程中,处理大数据量文件时,单线程的读取和操作往往效率低下,因为它们会占用大量内存并可能导致程序阻塞。为了解决这个问题,我们可以利用Java的多线程特性,将文件的读取和排序任务分散到多个线程中执行,...

    CSV大数据分批并压缩导出

    在IT行业中,大数据处理是一项关键任务,特别是在数据分析、报表生成以及数据存储等领域。"CSV大数据分批并压缩导出"这个...它结合了分批处理的内存管理策略和压缩技术的空间优化,确保了大数据操作的可行性和性能。

    java 读取写入csv

    通过上述分析,我们可以看到Java读取和写入CSV文件的过程涉及到多个步骤,包括初始化读写器、循环读取或写入数据、异常处理以及资源释放。正确地理解和应用这些步骤对于高效处理CSV文件至关重要。 此外,使用日志...

    java大数据作业_8Redis、Thrift、Hadoop2

    ### Java大数据作业知识点详解 #### 1. Redis常用的数据类型有什么? Redis 提供了多种数据类型,主要包括五种基本类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)以及Sorted Set(有序集合)。...

    读取大数据量的excel文件

    本案例采用的poi读取大数据的excel文件 usermodel模式对excel操作前需要将文件全部转入内存,对较大文件来说内存开销很大。但是其使用简单。 eventusermodel模式采用事件模型,对文件边读取边处理,内存消耗较低,...

    java大数据作业_2HDFS

    在Java大数据领域,Hadoop分布式文件系统(HDFS)是核心组件之一,它为大规模数据存储提供了可扩展、可靠的解决方案。下面将详细解答标题和描述中提到的知识点: 1. **检测损坏的文件及文件系统日常检查**: HDFS...

    使用Poi读取大数据量excel的方法

    在Java开发中,Apache POI库是一个非常实用的工具,用于读取和写入Microsoft Office格式的文件,包括Excel。本篇文章将详细讲解如何利用Apache POI库在Android环境中高效地处理大数据量的Excel文件,无论是2003的....

    java读写hdf5格式文件需要使用的库

    Java编程语言在处理科学数据时,常常会遇到HDF5(Hierarchical Data Format 5)这种文件格式。HDF5是一种高效、灵活的数据存储格式,广泛应用于科研、工程等领域,支持大数据存储和复杂的多维数组操作。为了在Java中...

    java快速导出几十万百万生成DBF文件数据后台

    在Java中,处理大数据的关键在于优化内存管理和批量操作。对于几百万条记录的数据,一次性加载到内存中可能会导致内存溢出,因此通常采用分批读取、流式处理或使用磁盘临时存储的方式来减少内存压力。 1. **分批...

Global site tag (gtag.js) - Google Analytics