热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据编程入门:Java序列化

在Java中提供了一种对象序列化机制,今天小编将为大家带来大数据编程入门:Java序列化

在Java中提供了一种对象序列化机制,今天小编将为大家带来大数据编程入门:Java序列化这篇文章来介绍序列化及反序列化。

一、序列化概念

Java提供了一种对象序列化的机制,在这种机制中,对象可以表示为字节序列,其中包括对象的数据、关于对象类型的信息以及存储在对象中的数据类型。

将序列化对象写入文件后,可以从文件中读取并反序列化该对象,也就是说,可以使用对象中的对象类型信息、对象数据和数据类型在内存中创建新对象。

整个过程是独立于Java虚拟机(JVM)的,也就是说,在一个平台上序列化的对象可以在完全不同的平台上反序列化。

类ObjectInputStream 和 ObjectOutputStream是高级数据流,包含反序列化和序列化对象的方法。

ObjectOutputStream类包含许多写入方法来写入各种数据类型,但有一个特殊的例外:

public final void writeObject(Object x) throws IOException

上面的方法序列化对象并将其发送到输出流。类似的ObjectInputStream类包含以下反序列化对象的方法:

public final Object readObject() throws IOException,

                                 ClassNotFoundException

此方法从流中获取下一个对象并反序列化该对象。它的返回值是Object,因此需要将其转换为适当的数据类型。

为了演示序列化在Java中是如何工作的,以下示例中将会使用上图的Employee类,假设我们定义了以下Employee类,它实现了Serializable接口。

public class Employee implements java.io.Serializable

{

   public String name;

   public String address;

   public transient int SSN;

   public int number;

   public void mailCheck()

   {

      System.out.println("Mailing a check to " + name

                           + " " + address);

   }

}

请注意,要想成功序列化一个类的对象,必须满足两个条件:

此类必须实现java.io.Serializable接口。

此类的所有属性都必须可序列化。如果属性不可序列化,则该属性必须指示它是瞬态的。

如果您想知道Java标准类是否可序列化,请查看类文档。检查类的实例是否可以序列化非常简单。您只需要检查该类是否实现了java.io.Serializable接口。

一、序列化对象

ObjectOutputStream类用于序列化对象。下面的SerializeDemo示例实例化Employee对象并将该对象序列化到文件中。

程序执行后,将创建一个名为employee.ser的文件。程序没有输出,但可以通过阅读代码来理解程序的功能。

注意:将对象序列化到文件时,Java标准惯例是为文件指定一个字符串.ser扩展名。

import java.io.*;

public class SerializeDemo

{

   public static void main(String [] args)

   {

      Employee e = new Employee();

      e.name = "Reyan Ali";

      e.address = "Phokka Kuan, Ambehta Peer";

      e.SSN = 11122333;

      e.number = 101;

      try

      {

         FileOutputStream fileOut =

         new FileOutputStream("/tmp/employee.ser");

         ObjectOutputStream out = new ObjectOutputStream(fileOut);

         out.writeObject(e);

         out.close();

         fileOut.close();

         System.out.printf("Serialized data is saved in tmp/employee.ser");

      }catch(IOException i)

      {

          i.printStackTrace();

      }

   }

}

二、反序列化对象

以下的 DeserializeDemo 程序实例了反序列化,/tmp/employee.ser 存储了 Employee 对象。

import java.io.*;

public class DeserializeDemo

{

   public static void main(String [] args)

   {

      Employee e = null;

      try

      {

         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");

         ObjectInputStream in = new ObjectInputStream(fileIn);

         e = (Employee) in.readObject();

         in.close();

         fileIn.close();

      }catch(IOException i)

      {

         i.printStackTrace();

         return;

      }catch(ClassNotFoundException c)

      {

         System.out.println("Employee class not found");

         c.printStackTrace();

         return;

      }

      System.out.println("Deserialized Employee...");

      System.out.println("Name: " + e.name);

      System.out.println("Address: " + e.address);

      System.out.println("SSN: " + e.SSN);

      System.out.println("Number: " + e.number);

    }

}

运行结果:

这里需要注意以下要点:

readObject()方法中的try/catch代码块尝试捕获ClassnotFoundException异常。对于要反序列化对象的JVM,它必须是能够找到字节码的类。如果JVM在对象反序列化期间找不到该类,则会引发ClassnotFoundException异常。

注意,readObject()方法的返回值被转化成Employee引用。

当对象被序列化时,属性SSN的值为111222333,但是因为该属性是短暂的,该值没有被发送到输出流,所以反序列化后 Employee 对象的SSN属性为 0。

以上就是关于大数据编程入门:Java序列化的全部内容了,希望这篇文章可以帮助到大家~

热文荐读:

大数据开发:SpringMVC框架入门

大数据开发:Git工作原理解析

大数据分析:SOA面向服务架构解读

大数据开发:看了都说好的JVM分析



推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
author-avatar
奇力0_843
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有