通过使用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处理时间稍长,内存消耗低。
相关推荐
sqlitFileDate方法使用FileReader和BufferedReader来读取大数据文件,并使用LinkedList来存储文件流对象和BufferedWriter对象,然后将每个小文件的数据写入到对应的文件中。 在写入和切分文件操作完成后,程序使用...
总的来说,"java的大数据读写"涵盖了Java语言在大数据环境下的核心能力,包括高效文件操作、内存管理、数据排序以及性能优化策略。通过学习这些知识点,开发者可以构建能够处理大规模数据的可靠系统。
Java作为广泛使用的编程语言,提供了丰富的API来操作HDFS,使得开发者能够方便地进行文件的读取、写入、复制、移动等操作。本文将详细讲解如何使用Java对HDFS进行文件操作,并介绍两个相关的项目示例。 首先,Java...
这个名为"java+大数据相关框架实战项目(Hadoop, Spark, Storm, Flink).zip"的压缩包文件,包含了四个核心的大数据处理框架——Hadoop、Spark、Storm和Flink的实战项目源码,这些框架都是Java开发的,用于解决大规模...
Java I/O流和NIO(New IO)库也是大数据处理中的重要工具,它们用于读写文件、网络通信,以及在内存和磁盘之间传输数据。 此外,Java的并发和多线程知识在处理大数据时尤为重要。大数据通常需要并行处理以提高效率...
"javaExcel大数据导出"这个话题涉及到的主要知识点包括:Java与Excel的交互、大数据处理策略、性能优化以及内存管理。 1. **Java与Excel的交互**: Java可以通过多种库来实现与Excel的交互,如Apache POI、...
在Java编程环境中,处理大数据并将其导出到Excel文件是一项常见的任务,特别是在数据分析、报表生成以及数据交换等场景。"javaExcel大数据导出.zip"这个压缩包可能包含了一个或多个示例项目,演示了如何在Java中高效...
这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过调用Java API来实现读写HDF5文件。而`libjhdf.so.3.2.1`和`jhdf5.dll`分别是Linux和Windows平台的动态链接库,...
Java大数据基础面试思考 在Java领域,大数据技术已经成为不可或缺的一部分,尤其在处理海量数据、实时分析和预测模型等方面。这份“java-大数据基础面试思考”资料涵盖了Java在大数据领域的核心概念和技术,对于...
### Java大数据作业知识点详解 #### 1. Redis常用的数据类型有什么? Redis 提供了多种数据类型,主要包括五种基本类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)以及Sorted Set(有序集合)。...
9. **分布式存储优化**:对于HDFS这样的分布式文件系统,优化块大小、副本数量和数据分布策略,能有效提高读写性能。 10. **任务调度策略**:在YARN或Mesos等资源管理系统中,优化任务调度算法,确保资源的高效利用...
- 支持随机访问文件,适用于大数据文件的分块读写。 7. **NIO(非阻塞I/O)** - Java 1.4引入的NIO库,提供了一种基于通道(Channel)和缓冲区(Buffer)的I/O模型,支持选择器(Selector)进行多路复用,提高了...
综上所述,"基于Java的大数据集中碎片数据实时标记方法"涉及到大数据处理的多个层面,包括数据存储、实时处理、并行计算和性能优化。理解和掌握这些知识点对于构建高效、稳定的大数据处理系统至关重要。
总结起来,Java在处理大数据时,主要采用了分批读取、批量入库、多线程并行处理和线程池管理等策略。这些技术能够有效优化内存使用,提高处理效率,同时防止服务器过载。在实际应用中,需要根据服务器配置和数据量...
在Java编程中,处理大数据量的Excel文件是一项挑战,因为Excel文件可能包含成千上万行数据。Apache POI是一个流行的库,专为处理Microsoft Office文档(如Excel)而设计,它提供了API来读取、写入和修改这些文件。在...
`javadbf.jar`是一个Java库,它提供了对DBF文件的读取和写入功能。这个库使得Java开发者能够方便地操作DBF文件,而无需了解底层的文件格式细节。使用这个库,你可以创建新的DBF文件,向文件中添加记录,读取现有文件...
在这个项目"0324大数据代码与数据_JAVA大数据_文本分析_运用MapReduce做数据分析_"中,我们将深入探讨如何利用Java来实现MapReduce对文本文件的数据处理和分析。 首先,Map阶段是MapReduce的核心部分,它的任务是对...
在Java编程中,处理大数据量文件时,单线程的读取和操作往往效率低下,因为它们会占用大量内存并可能导致程序阻塞。为了解决这个问题,我们可以利用Java的多线程特性,将文件的读取和排序任务分散到多个线程中执行,...
Java 将大文件分割为小文件 Java 将大文件分割为小文件是指将一个大文件分割成多个小文件,以便于存储、管理和处理。下面是实现该功能的 Java 代码示例: ### 1. 大文件分割 大文件分割是指将一个大文件分割成多...
在Java中,处理大数据的关键在于优化内存管理和批量操作。对于几百万条记录的数据,一次性加载到内存中可能会导致内存溢出,因此通常采用分批读取、流式处理或使用磁盘临时存储的方式来减少内存压力。 1. **分批...