Java序列化

作者: JWking | 来源:发表于2019-07-22 10:51 被阅读0次

    Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化。简洁点说,Java序列化的流程为“对象->字节序列->对象”。

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

该类必须实现 java.io.Serializable 对象。

该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的。

下面为Java代码实例

Java序列化

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

//Java序列化

public class Person_SerializeTest {

public Person_SerializeTest(){

Person person =new Person();                  //申明Person对象person

person.name ="张三";                                //添加属性值

person.sex ="男";

person.age =18;

person.number =110;

try{

//新建文件Person.ser

FileOutputStream fileout =new FileOutputStream("C:/Users/My/IdeaProjects/Java_Serialization/Person.ser");

ObjectOutputStream out =new ObjectOutputStream(fileout);

out.writeObject(person);                       //将对象序列化,即将对象及其信息写进.ser文件

out.close();

fileout.close();

System.out.print("序列化成功,保存在C:/Users/My/IdeaProjects/Java_Serialization/Person.ser");

}catch(IOException i){

i.printStackTrace();

}

}

}

运行结果如下:

注意: 当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名。

Java反序列化

import java.io.FileInputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

//Java反序列化

public class Person_DeserializeTest {

public Person_DeserializeTest(){

Person person =new Person();                //申明Person对象

try{

//读取文件Person.ser

FileInputStream filein =new FileInputStream("C:/Users/My/IdeaProjects/Java_Serialization/Person.ser");

ObjectInputStream in =new ObjectInputStream(filein);

person = (Person)in.readObject();        //反序列化,即读取对象及其相关信息

in.close();

filein.close();

}catch (IOException i){

i.printStackTrace();

return;

}catch (ClassNotFoundException c){

System.out.print("未找到文件");

c.printStackTrace();

return;

}

System.out.print("姓名:"+person.name+"\n性别:"+person.sex+"\n年龄:"+person.age+"\n号码:"+person.number);

}

}

运行结果如下:

注意:readObject() 方法中的 try/catch代码块尝试捕获 ClassNotFoundException 异常。对于 JVM 可以反序列化对象,它必须是能够找到字节码的类。如果JVM在反序列化对象的过程中找不到该类,则抛出一个 ClassNotFoundException 异常,在该实例中readObject() 方法的返回值被转化成 Employee 引用。另外,因为属性number是短暂的,该值没有被发送到输出流,所以反序列化后 Employee 对象的 number 属性为 0。

相关文章

  • Java-序列化-反序列化

    Thanks Java基础学习总结——Java对象的序列化和反序列化java序列化反序列化原理Java 序列化的高...

  • java序列化那些事儿

    java序列化作用 在说java序列化的作用之前,先说下什么是java序列化吧。java序列化是指把java对象转...

  • Java序列化

    Java序列化的几种方式以及序列化的作用 Java基础学习总结——Java对象的序列化和反序列化

  • Java序列化机制

    Java序列化机制 序列化和反序列化 Java序列化是Java内建的数据(对象)持久化机制,通过序列化可以将运行时...

  • Java 序列化 之 单例模式

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • java 序列化 原理解析

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • 认识Java序列化

    我的个人博客,认识Java序列化 引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java ...

  • JDK 序列化

    序列化和分序列化概念 什么是序列化和反序列化 Java序列化是指把Java对象转换为字节序列的过程,而Java反序...

  • Spark序列化

    Java序列化 有关Java对象的序列化和反序列化也算是Java基础的一部分,首先对Java序列化的机制和原理进行...

  • Serializable中为什么要设置UID

    1、什么是Java序列化与反序列化 Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指...

网友评论

    本文标题:Java序列化

    本文链接:https://www.haomeiwen.com/subject/eqqilctx.html