`
bjxagu
  • 浏览: 165922 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java序列化读取与文本文件读取数据效率对比

阅读更多

分别写入数据到序列化文件和文本文件中:

 public static void main(String[] args) {
  ArrayList al = new ArrayList();
  try {   
   FileWriter fw = new FileWriter(new File("e:\\s.txt"));
   for(int i=0;i<1000;i++){
    String str = "000\t111\t222\t222\t222\t222\t222\t222\t222\t222\n";
    al.add(str);
    fw.write(str);
   }
   fw.close();
   FileOutputStream fileStream = new FileOutputStream("e:\\s.obj");
   ObjectOutputStream out = new ObjectOutputStream(fileStream);
   out.writeObject(al);
   out.close();
  } catch (Exception e) {
   e.printStackTrace();
  }   
 }

 然后写程序读取序列化文件和文本文件,并将数据赋值到ArrayList中。

序列化读取:
public static void main(String[] args) {
  ArrayList al = new ArrayList();
  try {
   long t = System.currentTimeMillis();
   FileInputStream fileStream = new FileInputStream("e:\\s.obj");   
   BufferedInputStream br = new BufferedInputStream(fileStream); 
   ObjectInputStream in = new ObjectInputStream(br);
   al = (ArrayList)in.readObject();   
   in.close();
   System.out.println(System.currentTimeMillis()-t);
  } catch (Exception e) {
   e.printStackTrace();
  } 
 }

文本文件读取:
 public static void main(String[] args) {
  ArrayList al = new ArrayList();
  try {
   long t = System.currentTimeMillis();
   FileReader fw = new FileReader(new File("e:\\s.txt"));
   BufferedReader br = new BufferedReader(fw);
   String s = br.readLine();
   while (s != null) {
    al.add(s);
    s = br.readLine();
   }
   br.close();
   fw.close();
   System.out.println(System.currentTimeMillis()-t);
  } catch (Exception e) {
   e.printStackTrace();
  }

 }

 

结论:

在行数i=1000时,序列化读取平均32,文本文件读取平均16。
在行数i=10000时,序列化读取平均46,文本文件读取平均46。
在行数i=100000时,序列化读取平均96,文本文件读取平均316。

故在大数据量读取时,使用序列化方式存取数据,效率较高;而在小数据量(小于10000行)时,使用文本文件存取数据效率较高。

分享到:
评论

相关推荐

    介绍Java对象序列化使用基础

    将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机。对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象...

    JAVA小程序(文件读取)

    在JAVA小程序中,文件读取是一项基础且重要的操作,它涉及到如何访问和处理存储在本地系统、网络或数据库中的文本文件、二进制文件(如图片、音频等)以及特定格式的数据文件(如CSV、Excel等)。在这个"JAVA小程序...

    Java实现的用文本文件管理数据

    总结,使用Java实现文本文件管理数据涉及到的基本步骤包括:文件I/O操作,对象的序列化与反序列化,以及自定义的数据CRUD操作。对于简单的需求,这提供了一个轻量级的解决方案,避免了引入完整的数据库系统的复杂性...

    Java存储与读取对象.rar

    2. **文件存储(File I/O)**:除了序列化,还可以直接通过文件操作API来存储和读取对象的数据。例如,使用`ObjectOutputStream`和`ObjectInputStream`,或者使用`FileWriter`, `BufferedWriter`等进行文本数据的...

    Java反序列化实战.pdf

    - **定义**:在计算机科学领域,反序列化是指将字节流或文本流等数据转换回其原始对象结构的过程。这一过程通常与序列化相对应,序列化是将对象的状态转化为可以保存或传输的形式。 - **应用场景**: - **网络通信...

    深入剖析Java序列化:挑战复杂的面试题与详细解析

    14. **Java序列化与JSON序列化比较**: - Java序列化:针对Java对象,字节流形式。 - JSON序列化:文本形式,跨语言跨平台。 15. **禁止类序列化**: - 在类定义中添加`transient`关键字。 16. **自定义序列化...

    java jfreechart股票时序图,实现从文件中读取数据并显示

    通常,股票数据文件会包含日期、开盘价、收盘价、最高价、最低价和交易量等字段。例如,一个简单的CSV(逗号分隔值)文件可能如下所示: ``` 日期,开盘价,收盘价,最高价,最低价,交易量 2020-01-01,100.0,105.0,108....

    java读取XMl数据

    JAXB提供了一种将XML数据自动绑定到Java对象的机制,简化了数据序列化和反序列化的操作。 ```java // 创建Java类 @XmlRootElement(name = "root") public class Root { @XmlElement(name = "element1") ...

    java序列化

    Java序列化是Java平台中用于持久化对象状态的一种机制,它允许我们将一个对象的状态转换成字节流,以便存储到磁盘上或者通过网络进行传输。这个过程称为对象的序列化,而将字节流恢复为对象的过程则称为反序列化。在...

    JAVA序列化和反序列化的底层实现原理解析

    JAVA序列化和反序列化的底层实现原理解析 一、基本概念 JAVA序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。序列化是把对象转换成有序字节流,以便在网络上传输...

    系列化和反序列化的一个文砀

    3. **跨语言通信**:不同编程语言之间的数据交换,比如Java与Python之间,可以通过序列化后的标准格式(如JSON)进行。 4. **缓存机制**:序列化对象可以快速存入缓存,提高数据访问速度。 5. **配置文件**:配置...

    java-Hadoop序列化

    Hadoop提供了一些预定义的`Writable`实现类,如`Text`,它可以看作是Java `String`的序列化版本,用于处理UTF-8编码的文本数据。例如,我们可以创建一个`Text`对象来存储字符串: ```java Text test = new Text(...

    Java 的二进制和文本输入输出

    Java 中的文件输入输出是指从文件中读取或写入数据的操作。Java 提供了多种方式来实现文件输入输出,包括使用 File 类、InputStream 和 OutputStream。 文件读写 Java 中的文件读写可以使用 File 类的方法,例如 ...

    Java中对于字节流的读取方式

    4. **ObjectInputStream** 和 **ObjectOutputStream**:对于Java对象的序列化和反序列化,可以使用这两个类。它们允许将Java对象转换为字节流,并从字节流中恢复对象。 5. **ZipInputStream** 和 **ZipOutputStream...

    avro序列化

    5. **适合MapReduce**:在Hadoop的MapReduce框架中,Avro的序列化和反序列化效率高,且数据结构紧凑,更适合大规模数据处理。 接下来,我们来看一下Avro数据序列化与反序列化的流程: 1. **定义数据模式**:使用...

    序列化方法,很有用资源

    5. **备份与恢复**:在应用程序中,序列化可以用于备份关键数据,当发生异常时,可以从备份中恢复。 在Java中,内置了`java.io.Serializable`接口,任何实现了这个接口的类的对象都可以被序列化。使用`...

    数据导入导出 (java)

    在Java中,这通常涉及到文件操作和数据序列化/反序列化的技术。 1. **Excel数据导入导出**: Java中处理Excel文件最常用的库是Apache POI。Apache POI是一个开源项目,提供了对Microsoft Office文档(如XLS和XLSX...

    Java语言程序设计:ch07 文件与数据流.ppt

    同时,对象序列化是Java中另一个与文件和数据流相关的高级主题,它允许将对象的状态保存到文件中,以便后续恢复。`Serializable`接口是实现对象序列化的关键,它使得Java对象能够在流中传输。通过使用`...

    保存配置文件和读取配置文件

    在IT行业中,保存和读取配置文件是软件开发中的一项基本任务。...综上所述,保存和读取配置文件是软件工程中的基础操作,涉及文件操作、序列化与反序列化等多个技术点。掌握这一技能对于任何IT专业人员都是必要的。

    获取当前布局文件中控件的数据并封返回Map,序列化布局文件控件的值,获取所有控件的值

    Java的序列化虽然简单易用,但效率较低且不适用于跨平台。一种更常见的选择是使用Gson库,它可以将Java对象转换为JSON字符串,反之亦然。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

Global site tag (gtag.js) - Google Analytics