`
guoming521579
  • 浏览: 15328 次
文章分类
社区版块
存档分类
最新评论

java序列化深入研究

 
阅读更多

参考地址:http://www.verydemo.com/demo_c89_i125045.html

1.什么是序列化?

      简单的说就是为了保存各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象再读出来的过程。对象序列化就是把对象写入到输出流中,用来存储或传输。

 

2.序列化都保存了些什么?

      a.对象的类型。

      b.对象属性的类型。

      c.对象属性的值。

 

3.什么情况下需要序列化?

      a.当你想把对象的状态保存到一个文件中或者数据库中的时候。

      b.当你想用套接字在网络上传输对象的时候。

      c.当你想通过RMI传输对象的时候。

 

4.举例说明

      Java代码:

***************************************************

package com.gyb.serializable;

 

import java.io.Serializable;

 

public class DomainObject implements Serializable {

    public String name;

    public int age;

 

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public String toString() {
       return "This is a serializable test!";
    }

}

****************************************************

package com.gyb.serializable;

 

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

 

public class WriteObjectTestDemo {
    public static void main(String args[]) {
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try {
            DomainObject obj = new DomainObject();

            obj.setName("gyb");

            obj.setAge(24);

            fos = new FileOutputStream("d:/temp");
            oos = new ObjectOutputStream(fos);
            oos.writeObject(obj);
            oos.close();
            fos.close();
       } catch (FileNotFoundException e) {
            e.printStackTrace();
       } catch (IOException e) {
            e.printStackTrace();
       }
   }
}
**********************************************

package com.gyb.serializable;

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;

 

public class ReadObjectTestDemo {
    public static void main(String args[]) {
        FileInputStream fis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream("d:/temp");
            ois = new ObjectInputStream(fis);
            DomainObject obj = (DomainObject) ois.readObject();
            System.out.println("name = " + obj.getName());
            System.out.println("age = " + obj.getAge());
            ois.close();
            fis.close();
       } catch (FileNotFoundException e) {
            e.printStackTrace();
       } catch (IOException e) {
            e.printStackTrace();
       } catch (ClassNotFoundException e) {
            e.printStackTrace();
       }
   }
}
************************************************

结果会在D盘下生成一个temp对象文件,用一个支持二进制的编辑器工具打开后内容如下:

com.gyb.serializable.DomainObject
ageL
namet
Ljava/lang/String;xp
gyb

我们可以用对象反序列化从输入流中读出这个对象,ReadObjectTestDemo 类的执行结果为:

name = gyb

age = 24  

 

5.注意事项

    a.序列化时只对对象的状态进行保存,而不管对象的方法。

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

    c.当一个对象的实例变量引用了其它对象,序列化该对象时其它引用对象也被进行了序列化。

....................................................................

          1.安全方面的原因:比如一个对象拥有private,public等属性,若对这个对象进行写入文件或者rmi传输,在序列化进行传输的的过程中,这个对象的private属性是不受保护的。

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

分享到:
评论

相关推荐

    Java对象序列化标准最新版

    这是Java序列化标准规范,对于研究序列化源码能够提供指导作用,为深入研究Java序列技术奠定基础。

    Java实例高难度面试题及解析 - 展现你的编程实力!

    此外,我们还探讨了对象的哈希码、重写equals()和hashCode()方法的技巧,以及对象的序列化和反序列化。 通过研究和解答这些高难度问题,您将提升自己的编程水平,展现出对Java实例概念和相关技术的深入理解。无论您...

    Java开发详解.zip

    031504_【第15章:Java反射机制】_Java反射机制的深入研究笔记.pdf 031505_【第15章:Java反射机制】_动态代理笔记.pdf 031506_【第15章:Java反射机制】_工厂设计模式笔记.pdf 031601_【第16章:Annotation】_系统...

    Java数据编程指南

    数据定义 基本数据操作 数据完整性 表达式 连接 合并 子查询 小结 附录B 序列化 简介 序列化 可串行化的接口 小结 附录C Java和分布式应用程序 分布式系统 分布式...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...

    积分java源码-money-profiling:使用JavaMoney和CurrencyAPI对ChronicleMap进行基准测试

    在深入研究该项目中的单元测试和基准测试之前,有必要花一分钟时间了解任何用 Java 编写的金融应用程序所面临的核心问题。 我们如何表示货币金额 - 例如,0.1 美元? 带双? 大十进制? 还有什么? 某些浮点数无法...

    memcached1

    对基本的数据我们可以操作,对于普通的POJO而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的,所以必须...

    深度学习工具包:Matlab实现的RNN-LSTM与CNN模型 - 专业版下载

    1. RNN-LSTM网络的Matlab代码实现,允许用户对序列数据进行深入分析和预测。 2. CNN网络的Matlab代码,适用于图像数据的分类和特征提取任务。 3. 示例数据集和使用教程,帮助用户快速理解并应用这些模型。 4. 定制化...

    Python语言程序设计源代码.zip

    与其他高级编程语言如C、C++和Java等相比,Python在数据的表示、处理和可视化方面都有绝对的优势。有编程基础的学习者在学习Python时最好能忘掉以往程序设计语言的语法,彻底转变观念,以全新的姿态融入到Python的...

    Python语言程序设计PPT课件.zip

    与其他高级编程语言如C、C++和Java等相比,Python在数据的表示、处理和可视化方面都有绝对的优势。有编程基础的学习者在学习Python时最好能忘掉以往程序设计语言的语法,彻底转变观念,以全新的姿态融入到Python的...

    Python语言程序设计习题答案.zip

    与其他高级编程语言如C、C++和Java等相比,Python在数据的表示、处理和可视化方面都有绝对的优势。有编程基础的学习者在学习Python时最好能忘掉以往程序设计语言的语法,彻底转变观念,以全新的姿态融入到Python的...

    antlr4权威指南

    我编写了一些工具,用于创建数据库的对象-关系映射、描述三维可视化以及在Java源代码中插入性能监控代码。我甚至为一次演讲编写了一个简单的DNA模式匹配程序。  一门语言的正式描述称为语法(grammar),ANTLR能够...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    市场上相应的检测平台诸如检测通、凡特网等皆为pc端检测网站,并且操作繁琐不够人性化,用户在实地使用中存在很多问题。昆山工业技术研究院着眼于为委托用户和质检机构搭建良好的沟通桥梁,免去目前市场业务中企业...

    asp.net知识库

    泛型的序列化问题 .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载...

    C语言入门经典(第4版)--源代码及课后练习答案

     杨浩,知名译者,大学讲师,从事机械和计算机方面的教学和研究多年,发表论文数篇,参编和翻译的图书多达20余部,还曾多次获得市部级奖项。近几年一直在跟踪.NET技术的发展,积极从事.NET技术文档和图书的翻译工作...

    算法导论(part1)

    书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...

    算法导论(part2)

    书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...

Global site tag (gtag.js) - Google Analytics