首页

文章

java 中的序列化是什么意思?有什么好处?

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

我来回答

3个回答

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

1、序列化是干什么的?

简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

2、什么情况下需要序列化

a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;

3、当对一个对象实现序列化时,究竟发生了什么?

在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:

Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);

当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,70)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。

FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);

4、实现序列化(保存到一个文件)的步骤

a)Make a FileOutputStream
java 代码
FileOutputStream fs = new FileOutputStream("foo.ser");
b)Make a ObjectOutputStream

java 代码
ObjectOutputStream os = new ObjectOutputStream(fs);
c)write the object

java 代码
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
d) close the ObjectOutputStream

java 代码
os.close();

5、举例说明

java 代码
import java.io.*;

public class Box implements Serializable
{
private int width;
private int height;

public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}

public static void main(String[] args){
Box myBox = new Box();
myBox.setWidth(50);
myBox.setHeight(30);

try{
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}catch(Exception ex){
ex.printStackTrace();
}
}

}

6、相关注意事项

a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
c)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:

1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。
2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。

热心网友 时间:2022-02-28 17:08

序列化就是把要在网络上传输的对象流化,以便于对象在网络上传输,每个可序列化的对象都有一个序列化ID是该对象的唯一标识。序列化跟同步好像没直接的关系吧

热心网友 时间:2022-02-28 18:42

序列化用于底层的数据传输吧,因为底层通信用的是二进制码,而不是对象,序列化是一个标志接口,告诉底层这个类的对象具有序列化的能力
谷歌浏览器怎么设置成中文_谷歌浏览器设置中文语言 【谷歌浏览器技巧】谷歌浏览器如何更改语言? 史上最全ETF全解 证券ETF是深市的吗 怎样把莲藕肉丸子做的好吃? 高三语文小说赏析小说形象分析与答题技巧 人物形象题答题技巧 借助什么分析小说的人物形象 脖子旁边疼是什么原因 在群里不是好友怎么把群里人建另一个群 蛇床子的药理作用 炒蛇床子和生蛇床子有什么区别 为什么把床头垫高点 为什么床头高点儿 为什么要给新生儿抬高床头 人脸识别打卡考勤机找哪家? 背后搞你的人什么心态 很皮的搞笑撩人句子高情商的撩人句子(82句) 恶搞爱情短信 床头挂什么财运最旺最好 床上放什么东西辟邪 道家床头挂什么画最好最旺 床头贴什么最好最旺道家 建设工程竣工后,是否必须取得《规划验收许可证》? 环评竣工验收 手机几年没用了开不了机怎么办 红烧啤酒鸡的家常做法大全怎么做好 双男主泰剧新剧推荐 2019泰剧《爱情理论》小受暗恋花心直男好友 液体卫生巾和普通卫生巾的区别是什么?液体卫生巾的优点 可水洗粘尘垫哪家好 电脑12g够用吗? 宝宝双侧肺炎病变严重吗 什么是洁净气体灭火器 2024年实用父亲节礼物推荐有哪些?(2300字选购指南) 40包速溶咖啡比对 作文请以“这样挺好”为题,写一篇记叙文或议论文,不少于800字。要求... 如何写好作文我就是这么好 惊魂未定什么意思?有什么典故? 安阳火车站到新师院北门的公交车有哪些? 安阳市公交车26从火车站发车多长时间到终点站 太仓汽车站去太仓乐遥浏河公墓坐几路公交 请问廉江市哪里有奥克斯手机专业维修店,急!! 梅赛德斯奔驰E350敞篷版的整体简介及其性能如何 员工出差前需要做什么准备工作? 用(祝愿自己生日快乐)写首藏头诗,希望有才华的人帮帮忙,谢谢了_百度... 请问做爱前吃什么药可以延长做爱时间? 我每天锻炼,然后吃什么,能延长我房事时间?现在两分钟,双方都苦恼。_百 ... 做爱前吃什么最能滋补身体 吃什么能让房事时间长些? java 中的序列化是什么意思 什么是序列化,在java中如何实现序列化? 在JAVA中什么叫序列化和反序列化 在JAVA中什么叫序列化和反序列化? Java简述 java中的序列化是什么意思 java序列化的优点和缺点是什么? java序列化有什么作用? 什么是java序列化,如何实现序列化 什么是Java中的序列化和反序列化? 什么是java的序列化?jdk如何实现java序列化 什么是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基础后,该学什么内容 苹果手机怎么修改点不进去 苹果7plus如何修改 苹果7plus怎么修改
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com