问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

什么是java的序列化?jdk如何实现java序列化

发布网友 发布时间:2022-02-28 14:20

我来回答

1个回答

热心网友 时间:2022-02-28 15:49

Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨。
1.Java序列化与反序列化

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。

2.为什么需要序列化与反序列化

我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上
传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方
面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。

当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。

3.如何实现Java序列化与反序列化

1)JDK类库中序列化API

java.io.ObjectOutputStream:表示对象输出流

它的writeObject(Object obj)方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。

java.io.ObjectInputStream:表示对象输入流

它的readObject()方法源输入流中读取字节序列,再把它们反序列化成为一个对象,并将其返回。

2)实现序列化的要求

只有实现了Serializable或Externalizable接口的类的对象才能被序列化,否则抛出异常。

3)实现Java对象序列化与反序列化的方法

假定一个Student类,它的对象需要序列化,可以有如下三种方法:

方法一:若Student类仅仅实现了Serializable接口,则可以按照以下方式进行序列化和反序列化

ObjectOutputStream采用默认的序列化方式,对Student对象的非transient的实例变量进行序列化。

ObjcetInputStream采用默认的反序列化方式,对对Student对象的非transient的实例变量进行反序列化。

方法二:若Student类仅仅实现了Serializable接口,并且还定义了readObject(ObjectInputStream in)和writeObject(ObjectOutputSteam out),则采用以下方式进行序列化与反序列化。

ObjectOutputStream调用Student对象的writeObject(ObjectOutputStream out)的方法进行序列化。

ObjectInputStream会调用Student对象的readObject(ObjectInputStream in)的方法进行反序列化。

方法三:若Student类实现了Externalnalizable接口,且Student类必须实现readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法,则按照以下方式进行序列化与反序列化。

ObjectOutputStream调用Student对象的writeExternal(ObjectOutput out))的方法进行序列化。

ObjectInputStream会调用Student对象的readExternal(ObjectInput in)的方法进行反序列化。

4)JDK类库中序列化的步骤

步骤一:创建一个对象输出流,它可以包装一个其它类型的目标输出流,如文件输出流:

ObjectOutputStream out = new ObjectOutputStream(new fileOutputStream(“D:\\objectfile.obj”));

步骤二:通过对象输出流的writeObject()方法写对象:

out.writeObject(“Hello”);

out.writeObject(new Date());

5)JDK类库中反序列化的步骤

步骤一:创建一个对象输入流,它可以包装一个其它类型输入流,如文件输入流:

ObjectInputStream in = new ObjectInputStream(new fileInputStream(“D:\\objectfile.obj”));

步骤二:通过对象输出流的readObject()方法读取对象:

String obj1 = (String)in.readObject();

Date obj2 = (Date)in.readObject();

说明:为了正确读取数据,完成反序列化,必须保证向对象输出流写对象的顺序与从对象输入流中读对象的顺序一致。

为了更好地理解Java序列化与反序列化,选择方法一编码实现。

Student类定义如下:

[java] view plain copy
package com.jieke.io;
import java.io.Serializable;

/**
*Title:学生类
*Description:实现序列化接口的学生类
*Copyright: copyright(c) 2012
*Filename: Student.java
*@author Wang Luqing
*@version 1.0
*/
public class Student implements Serializable
{
private String name;
private char sex;
private int year;
private double gpa;

public Student()
{

}
public Student(String name,char sex,int year,double gpa)
{
this.name = name;
this.sex = sex;
this.year = year;
this.gpa = gpa;
}

public void setName(String name)
{
this.name = name;
}

public void setSex(char sex)
{
this.sex = sex;
}

public void setYear(int year)
{
this.year = year;
}

public void setGpa(double gpa)
{
this.gpa = gpa;
}

public String getName()
{
return this.name;
}

public char getSex()
{
return this.sex;
}

public int getYear()
{
return this.year;
}

public double getGpa()
{
return this.gpa;
}
}

把Student类的对象序列化到文件O:\\Java\\com\\jieke\\io\\student.txt,并从该文件中反序列化,向console显示结果。代码如下:

[java] view plain copy
import java.io.*;

/**
*Title:应用学生类
*Description:实现学生类实例的序列化与反序列化
*Copyright: copyright(c) 2012
*Filename: UseStudent.java
*@author Wang Luqing
*@version 1.0
*/

public class UseStudent
{
public static void main(String[] args)
{
Student st = new Student("Tom",'M',20,3.6);
File file = new File("O:\\Java\\com\\jieke\\io\\student.txt");
try
{
file.createNewFile();
}
catch(IOException e)
{
e.printStackTrace();
}
try
{
//Student对象序列化过程
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(st);
oos.flush();
oos.close();
fos.close();

//Student对象反序列化过程
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Student st1 = (Student) ois.readObject();
System.out.println("name = " + st1.getName());
System.out.println("sex = " + st1.getSex());
System.out.println("year = " + st1.getYear());
System.out.println("gpa = " + st1.getGpa());
ois.close();
fis.close();
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

结果如下所示:

name = Tom

sex = M

year = 20

gpa = 3.6

总结:

1)Java序列化就是把对象转换成字节序列,而Java反序列化就是把字节序列还原成Java对象。
2)采用Java序列化与反序列化技术,一是可以实现数据的持久化,在MVC模式中很是有用;二是可以对象数据的远程通信。
什么是java的序列化?jdk如何实现java序列化

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上 传送。那么当两个Java进程...

什么是java的序列化和反序列化?

Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。我们都知道,在进行浏览器访问的时候,我们看到的文本、图片、音频、视频等都是通过二进制序列进行传输的,那么如果我们需要将Java对象进行传输的时候,是不是也应该先将对象进行序列化?答案是肯定的,我们...

java如何实现对象的序列化

1、Java中需要序列化的类必须实现Serializable接口,这是一个空接口;为方便后续反序列化操作更顺畅,需要为这个实体类添加一个有默认值的serialVersionUID成员变量;后续步骤会演示如何将这个实体类对象进行序列化。2、演示将对象序列化并写入到一个本地文件中:首先创建一个类,并声明一个成员方法;通过类...

java 序列化

简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。2、什么情况下需要序列化 a)当你想把的内存中的对...

浅谈Java对象的序列化和反序列化

把Java对象转换为字节序列的过程称为对象的序列化 把字节序列恢复为Java对象的过程称为对象的反序列化 对象的序列化主要有两种用途 ) 把对象的字节序列永久地保存到硬盘上 通常存放在一个文件中 ) 在网络上传送对象的字节序列 一 JDK类库中的序列化API java io ObjectOutputStream代表对象输出流 它的...

如何防止java编程语言序列化网络攻击?

序列化在哪里?如何知道我的应用程序是否用到了序列化?要移除序列化,需要从java.io包开始,这个包是java.base模块的一部分。常见的使用场景是:实现Serializable接口和(可选)serialversionuid长整型字段。使用ObjectInputStream或ObjectOutputStream。使用严重依赖序列化的库,例如:Xstream、Kryo、BlazeDS和大...

java序列化有什么作用?

1、是相应的对象实现了序列化接口Serializable,这个使用的比较多,对于序列化接口Serializable接口是一个空的接口。2、实现序列化的第二种方式为实现接口Externalizable。Externlizable的部分源代码如下:see java.io.ObjectInput see java.io.Serializable since JDK1.1 /public interface Externalizable ...

serialversionuid的作用

1、serialVersionUID意思是序列化的版本号作用一些java类中为什么需要重载 serialVersionUID 属性在Java中,软件的兼容性是一个大问题,尤其在使用到对象串行性的时候,那么在某一个对象已经被串行化了,可是这个对象又被。2、serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持...

《java类中的serialVersionUID是什么作用》的评论

如果你没听说过 Java Serialization (序列化,有人书翻译成串行化),那去找些 serialization 介绍看看,下面说的第2段类结构变化时是中级水平的,理解 Java 的一些细节才能理解,多数情况下人们只提到第一种情况(类的结构没有变化时),也只需要第一种情况。当Serialization两端(比如Socket两端)使用一个...

计算机2级JAVA都考些什么?

?五、 Java语言的基本语句 ??1. 表示式语句。 ??2. 条件语句。 ??3. 回圈语句。 ??4. 注释语句。 ??5. 异常处理。 ?六、 Java程式设计技术基础 ??1. 执行绪的概念和使用。 ??2. 同步与共享。 ??3. 序列化概念和目的。 ??4. 序列化方法。 ??5. 序列化的举例。 ??6. 基于文字的应用。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
喝白酒的女人性格怎样(喝白酒的女人有哪些气质) ...喜欢那晕晕的感觉,尤其是自己独饮的时候这正常吗? only 棉衣 行吗 灌云县春笋食品厂怎么样? 1962年灌云县高考地点 男子查精子是挂什么科 检查精液常规要多少钱 想结婚前进行一次精子质量检查,应该挂什么科室啊? 童话故事王国里大臣的有什么职位 KUGOU音乐把歌曲传送到手机里的时候怎么只有歌曲没有歌词啊??KUGOU的歌... 什么是java序列化 、什么是java序列化,如何实现java序列化?或者请解 释Serializable接口的作用。 什么是java序列化 csdn JAVA中,序列化是指的什么?有何用途? 什么是java的序列化和反序列化? 什么是Java序列化?如何实现序列化? java中的序列化是什么意思 面试题:什么是java的序列化 什么是java序列化,如何实现java序列化? 什么是java序列化,如何实现java序列化 什么是java序列化,如何实现java序列化? 江苏常州有哪些特产? 江苏特产小吃 江苏有什么水果特产 江苏有什么特产或小吃 江苏特产有哪些 江苏有什么特产茶叶 江苏有什么特产可以带回来的 江苏特产有哪些土特产 江苏省有什么特产 什么是Java中的序列化和反序列化? 什么是java序列化,如何实现序列化 java序列化有什么作用? java序列化的优点和缺点是什么? Java简述 java中的序列化是什么意思 在JAVA中什么叫序列化和反序列化? 在JAVA中什么叫序列化和反序列化 什么是序列化,在java中如何实现序列化? java 中的序列化是什么意思 java 中的序列化是什么意思?有什么好处? 在java中什么叫做类的序列化 什么是java的序列化,如何实现java序列化 JAVA你知道后端都要学习些什么吗? JAVA后端应该学什么技术? java开发需要学习什么? java开发都需要学什么 java后端需要学习哪些内容,现在学这个好找工作吗 Java后端,需要学习哪些内容 从事 Java 后端开发,都要学习哪些知识和技能? java后端开发需要掌握什么
  • 焦点

最新推荐

猜你喜欢

热门推荐