java序列化理解,java序列化含义的理解(2)

news/2024/7/4 6:43:12

java序列化含义的理解(2)

7.当对一个对象实现序列化时,发生的变化:

在没有序列化前,每个保存在堆(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);

8.实现序列化(保存到一个文件)的步骤:

a)Make a FileOutputStream

FileOutputStream fs = new FileOutputStream("foo.ser");

b)Make a ObjectOutputStream

ObjectOutputStream os = new ObjectOutputStream(fs);

c)write the object

os.writeObject(myObject1);

os.writeObject(myObject2);

os.writeObject(myObject3);

d) close the ObjectOutputStream

os.close();

9.举例说明

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();

}

}

}

10.注意事项

a.当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口

b.当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化

c.并非所有的对象都可以序列化,至于为什么不可以,有很多原因了,比如:

11.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,

比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。

12. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分配,而且,也是没有必要这样实现。


http://www.niftyadmin.cn/n/3571277.html

相关文章

matlab 逻辑矩阵方格图,已知45个点X Y Z的坐标值已知,如何用matlab画出网格图,另外每个小方格里带颜色 - 程序语言 - 小木虫 - 学术 科研 互动社区...

相邻点连成线x1[94.38604197.620596100.690028103.691318106.64213794.41851797.663183100.748096103.768930106.74305794.41139397.665528100.765316103.805099106.80194794.37965097.642556100.756556103.814638106.83356494.33004697.601107100.728728103.804532106.8449639…

consul + Nginx 实现nginx代理自动载入backed的服务器, 实现fullnat效果

consul 安装部署略过,具体参见http://kkkkkk.blog.51cto.com/468162/1914469 nginx扩展consul模块 https://github.com/weibocom/nginx-upsync-module 本文转自 tianshuai369 51CTO博客,原文链接:http://blog.51cto.com/kkkkkk/1915716

php深层理论知识太浅,JS中浅度克隆和深度克隆有什么区别

本文章分享的是JavaScript中一个重要的知识点克隆,具有一定的参考价值,希望对大家的学习有所帮助JavaScript中克隆分为两种:浅度克隆和深度克隆,都是先对值遍历一遍判断是原始值还是引用值,原始值直接复制,…

勘探重力实验matlab,重力场与重力勘探实验指导.ppt

重力场与重力勘探实验指导.ppt 重力场与重力勘探实验指导,实验一、重力仪认识操作,一、实验目的 了解掌握金属弹簧重力仪的测量原理; 学习操作金属弹簧重力仪,了解金属弹簧重力仪的工作范围、操作步骤、性能特点等,为实际野外重力测量实习奠定…

CentOS6.6环境下布署LVS+keepalived

CentOS6.6 环境下布署LVSkeepalived 环境: 操作系统 Centos 6.6 _X64 WEB nginx 结构: LVS-MASTER:10.6.1.210 LVS-BACKUP: 10.6.1.211 LVS-VIP: 192.168.1.214 Realsever: 10.6.1.212,10.6.1.213 一.Keepalive…

txt命名为matlab文件,matlab导入

读入以逗号分隔的数据csvwrite将数据写入文件,数据间以逗号分隔dlmread将以 ASCII 码分隔的数值数据读入到矩阵中dlmwrite将矩阵数据写入到文件中,以 ASCII 分隔textread从文本文件中读入数据,将结果分别保存textscan从文本文件中读入数据&am…

if or函数套用_4个函数,5种方法,6个案例,条件判定原来是这么简单

第一种方法:IF函数对一种条件进行判定,根据条件是否成立输出两种不同的结果,即:IF(logical-test,[value-if-true],[value-if-false])或IF((测试条件,真值,假值)。例如:购买数量大于等…

Linux服务器搭建jdk环境

为什么80%的码农都做不了架构师?>>> ##Linux服务器搭建jdk环境 对于jdk的安装我们有两个选择,一个是open jdk,一个是oracle jdk,要说这两个的区别,自行百度,个人感觉用起来差不多,但…