`

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

分享到:
评论

相关推荐

    Java写入大数据文件

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

    java的大数据读写

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

    java对大数据HDFS文件操作

    Java作为广泛使用的编程语言,提供了丰富的API来操作HDFS,使得开发者能够方便地进行文件的读取、写入、复制、移动等操作。本文将详细讲解如何使用Java对HDFS进行文件操作,并介绍两个相关的项目示例。 首先,Java...

    java+大数据相关框架实战项目(Hadoop, Spark, Storm, Flink).zip

    这个名为"java+大数据相关框架实战项目(Hadoop, Spark, Storm, Flink).zip"的压缩包文件,包含了四个核心的大数据处理框架——Hadoop、Spark、Storm和Flink的实战项目源码,这些框架都是Java开发的,用于解决大规模...

    Java大数据课程核心笔记

    Java I/O流和NIO(New IO)库也是大数据处理中的重要工具,它们用于读写文件、网络通信,以及在内存和磁盘之间传输数据。 此外,Java的并发和多线程知识在处理大数据时尤为重要。大数据通常需要并行处理以提高效率...

    javaExcel大数据导出

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

    javaExcel大数据导出.zip

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

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

    这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过调用Java API来实现读写HDF5文件。而`libjhdf.so.3.2.1`和`jhdf5.dll`分别是Linux和Windows平台的动态链接库,...

    java-大数据基础面试思考.zip

    Java大数据基础面试思考 在Java领域,大数据技术已经成为不可或缺的一部分,尤其在处理海量数据、实时分析和预测模型等方面。这份“java-大数据基础面试思考”资料涵盖了Java在大数据领域的核心概念和技术,对于...

    java大数据作业_8Redis、Thrift、Hadoop2

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

    大数据性能调优

    9. **分布式存储优化**:对于HDFS这样的分布式文件系统,优化块大小、副本数量和数据分布策略,能有效提高读写性能。 10. **任务调度策略**:在YARN或Mesos等资源管理系统中,优化任务调度算法,确保资源的高效利用...

    java io读取文件

    - 支持随机访问文件,适用于大数据文件的分块读写。 7. **NIO(非阻塞I/O)** - Java 1.4引入的NIO库,提供了一种基于通道(Channel)和缓冲区(Buffer)的I/O模型,支持选择器(Selector)进行多路复用,提高了...

    基于Java的大数据集中碎片数据实时标记方法.zip

    综上所述,"基于Java的大数据集中碎片数据实时标记方法"涉及到大数据处理的多个层面,包括数据存储、实时处理、并行计算和性能优化。理解和掌握这些知识点对于构建高效、稳定的大数据处理系统至关重要。

    java对大数据的处理.pdf

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

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

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

    java快速导出几十万百万生成DBF文件数据后台内附有javadbf.jar

    `javadbf.jar`是一个Java库,它提供了对DBF文件的读取和写入功能。这个库使得Java开发者能够方便地操作DBF文件,而无需了解底层的文件格式细节。使用这个库,你可以创建新的DBF文件,向文件中添加记录,读取现有文件...

    0324大数据代码与数据_JAVA大数据_文本分析_运用MapReduce做数据分析_

    在这个项目"0324大数据代码与数据_JAVA大数据_文本分析_运用MapReduce做数据分析_"中,我们将深入探讨如何利用Java来实现MapReduce对文本文件的数据处理和分析。 首先,Map阶段是MapReduce的核心部分,它的任务是对...

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

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

    java 把大文件分割为小文件

    Java 将大文件分割为小文件 Java 将大文件分割为小文件是指将一个大文件分割成多个小文件,以便于存储、管理和处理。下面是实现该功能的 Java 代码示例: ### 1. 大文件分割 大文件分割是指将一个大文件分割成多...

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

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

Global site tag (gtag.js) - Google Analytics