- 浏览: 51697 次
- 性别:
- 来自: 待定
文章分类
最新评论
-
huhu1018:
有那么点点糊涂。。
Spring mail 实例+详解 -
12616383:
谢谢3楼的提醒。。以后要认真起来,嘿嘿
java_croe 学习笔记之新IO---java.nio 之内存映射文件 -
kuaiyuelaogong:
楼主的代码只是拷贝的,呵呵,调用的都是第一个方法,楼下的想测试 ...
java_croe 学习笔记之新IO---java.nio 之内存映射文件 -
fabulous:
inputStream
35169c9e
672耗时
Buff ...
java_croe 学习笔记之新IO---java.nio 之内存映射文件 -
mercyblitz:
模板利用了多态和抽象。
模板方法模式
一、串行化的概念和目的
1.什么是串行化
对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization) 。串行化的主要任务是写出对象实例变量的数值。如果交量是另一对象的引用,则引用的对象也要串行化。这个过程是递归的,串行化可能要涉及一个复杂树结构的单行化,包括原有对象、对象的对象、对象的对象的对象等等。对象所有权的层次结构称为图表(graph)。
2.串行化的目的
Java对象的单行化的目标是为Java的运行环境提供一组特性,如下所示:
1) 尽量保持对象串行化的简单扼要 ,但要提供一种途径使其可根据开发者的要求进行扩展或定制。
2) 串行化机制应严格遵守Java的对象模型 。对象的串行化状态中应该存有所有的关于种类的安全特性的信息。
3) 对象的串行化机制应支持Java的对象持续性。
4) 对象的串行化机制应有足够的 可扩展能力以支持对象的远程方法调用(RMI)。
5) 对象串行化应允许对象定义自身 的格式即其自身的数据流表示形式,可外部化接口来完成这项功能。
二、串行化方法
从JDK1.1开始,Java语言提供了对象串行化机制 ,在java.io包中,接口Serialization用来作为实现对象串行化的工具 ,只有实现了Serialization的类的对象才可以被串行化。
Serializable接口中没有任何的方法。当一个类声明要实现Serializable接口时,只是表明该类参加串行化协议,而不需要实现任何特殊的方法。下面我们通过实例介绍如何对对象进行串行化。 (转自http://blog.csdn.net/sodino/archive/2008/12/21/3576147.aspx)
关于对象序列化和反序列化的顺序:反序列化是按照序列化的顺序进行读取的,所以反序列化的时候一定要按照序列化的顺序读取
自己写的列子
package twelve; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Date; import java.util.GregorianCalendar; /** * @Title ObjectFileTest.java * @description TODO * @author qinpeng * @date Aug 19, 2009 10:40:49 PM */ public class ObjectFileTest { public static void main(String[] args) { ObjectOutputStream out = null; ObjectInputStream in = null; Manager boss = new Manager("carl c", 8000, 1987, 12, 15); boss.setBonus(5000); Employee[] staff = new Employee[3]; staff[0] = boss; staff[1] = new Employee("harry", 5000, 1985, 8, 21); staff[2] = new Employee("tony", 4000, 1986, 6, 12); try { try { out = new ObjectOutputStream(new FileOutputStream( "employee.dat")); out.writeObject(staff); } finally { if (out != null) { out.close(); } } } catch (FileNotFoundException foundE) { foundE.printStackTrace(); System.err.print("employee.dat is not found"); } catch (IOException ioE) { ioE.printStackTrace(); System.err.print("IOException of main"); } try { try { in = new ObjectInputStream(new FileInputStream("employee.dat")); Employee[] newStaff = (Employee[]) in.readObject(); for (Employee e : newStaff) { System.out.println(e); } } finally { if (in != null) { in.close(); } } } catch (ClassNotFoundException classE) { classE.printStackTrace(); System.err.print("employee.dat is not found"); } catch (FileNotFoundException foundE) { foundE.printStackTrace(); System.err.print("employee.dat is not found"); } catch (IOException ioE) { ioE.printStackTrace(); System.err.print("IOException of main"); } } } class Employee implements Serializable { private String name; //private transient String name; private double salary; private Date hireDay; public Employee() { } public Employee(String n, double s, int year, int month, int day) { name = n; salary = s; GregorianCalendar claendar = new GregorianCalendar(year, month - 1, day); } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; } public String toString() { return getClass().getName() + "name=" + name + "---salary=" + salary + "---hirDay=" + hireDay; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public Date getHireDay() { return hireDay; } public void setHireDay(Date hireDay) { this.hireDay = hireDay; } } class Manager extends Employee { private double bonus; public Manager(String n, double s, int year, int month, int day) { super(n, s, year, month, day); } public String toString() { return super.toString() + "bonus=" + bonus; } public double getSalary() { double baseSalay = super.getSalary(); return baseSalay + bonus; } public double getBonus() { return bonus; } public void setBonus(double bonus) { this.bonus = bonus; } }
这里当域没有用 transient 修饰的时候,该域作为对象的内容被保存起来。输出结果如下:
twelve.Managername=carl c---salary=8000.0bonus=5000.0
twelve.Employeename=harry---salary=5000.0
twelve.Employeename=tony---salary=4000.0
如果域 name 使用 transient 该域将不会进行保存
class Employee implements Serializable { //private String name; private transient String name; private double salary; private Date hireDay; ........
结果如下:
twelve.Managername=null---salary=8000.0bonus=5000.0
twelve.Employeename=null---salary=5000.0
twelve.Employeename=null---salary=4000.0
评论
否则修改过的类在反序列化的时候会报错的!!!
我也是刚学 对象流 和序列化,请前辈说得具体些,是我修改时要指定对象的 序列ID 是吧
否则修改过的类在反序列化的时候会报错的!!!
发表评论
-
我的 effective java -- 7.避免使用中介方法 finalizer
2012-07-23 20:44 9927.避免使用终结方法 finalizer 终结方法 ... -
我的 effective java -- 6.消除过期的对象引用
2012-07-23 19:51 12306.消除过期的对象引用 例子: public ... -
我的 effective java -- 5.避免创建不必要的对象.
2012-07-19 20:37 8025 避免创建不必要的对象 一般来说,最好能重 ... -
我的 effective java -- 4.通过私有构造器强化不可实例化的能力
2012-07-19 19:58 9984.通过私有化构造器强化不可实例化的能力 当编 ... -
我的 effective java -- 构建器
2012-05-21 20:51 946public class TestConstruc ... -
[转]java中byte转换int时为何与0xff进行与运算
2012-03-27 09:17 937在剖析该问题前请看如下代码public static ... -
关于java 的常量池
2012-02-18 23:34 1888常量:在编译初 ... -
java_croe 学习笔记之新IO---java.nio 之内存映射文件
2009-08-25 23:37 3198解释:将文件的一段区域映射到内存中,比传统的文件处理速度要快很 ... -
java_croe 学习笔记之对象流 (补充1 保存对象引用)
2009-08-20 23:11 1259保存对象引用: 基于前面的例子,我们现在假设每个Manage ... -
java--core 之 StringBuffer 和 StringBuilder 区别
2009-08-18 23:11 877java.lang.StringBuffer java ... -
java-core 学习笔记之异常处理篇
2009-08-06 23:24 8681 异常的分类:Error:java运行时系统的内部错误和资源 ... -
异常处理---你能找出几处问题
2009-08-06 23:04 840一共有6处问题,你能找出几处来? 1 OutputStrea ... -
core---java 之接口与内部类(持续更新)
2009-07-28 23:12 9681 接口是什么? 接口是用来描述类具备的功能,但是并不 ... -
core---java 之继承篇(持续更新)
2009-07-22 23:17 9141 类,超类,子类 子类是由超类继承而来,他具有超 ... -
java 类设计技巧
2009-07-22 21:51 9071 一定要将数据设计为私有。 2 一定要对数据初 ... -
java core--java 核心技术学习笔记----java.util.Arrays
2009-06-16 13:36 1198package com.zfsoft.monday; i ... -
学习 臧圩人的面试题详解后总结 及费解的问题
2009-04-22 00:06 9831 怎么样的对象在编译类时就放入字符串池中? ... -
关于 重写,重载,多态的精辟解释
2009-02-19 00:01 1059我哥们对 重载 ,重写,多态的 精辟解释: 对象:人 重写: ...
相关推荐
其次,Java的面向对象特性是其核心思想之一。书中深入讲解了类、对象、封装、继承、多态等面向对象的基本概念。理解类与对象的关系,如何通过类来抽象现实世界中的实体,如何利用继承实现代码的复用,以及多态性如何...
Hibernate作为一款强大的对象关系映射(ORM)工具,极大地简化了Java应用程序与数据库之间的交互。在这个过程中,我们将深入探讨Hibernate的核心概念、工作原理以及如何在实际项目中有效地运用Hibernate AIP。 首先...
在探讨CROE2E6300处理器与MSI 945P NEO3主板的超频方案之前,我们首先要理解几个关键概念和技术限制。E6300是一款基于Intel Core微架构的CPU,拥有良好的超频潜力,而945P NEO3主板则是基于Intel 945P芯片组设计,它...
随着处理器负载的增加,核心温度也会随之升高。过高的温度可能会导致处理器降频,甚至触发保护机制,导致电脑重启。使用CoreTemp这类工具,用户可以确保处理器温度始终保持在一个安全的范围内,避免因过热带来的性能...
Creo Elements Pro 5.0 中文版是该软件的本地化版本,便于中文用户学习和使用。张克义作为该教程的主编,编写的《Creo Elements Pro 5.0中文版实例教程》是一本面向广大工程设计人员以及相关专业学生的技术指导书籍...
谷歌二维码生成 二维码,在网上很火,以前没有太多的关注,最近想了解一下,就找了些博客看一下,主要是关于Google的,下面分享一篇博客,写的很好了。
creo pdx10.0冲模专家 菜单汉化包 PDX10.0配合Creo4.0使用,一个简体汉化包分享给网友。 汉化方法: 压缩包解压后,将如图所示两个目录复制粘贴到PDX10.0目录下,启动Creo4.0即可显示中文简体的pdx界面了
次教程为creo3.0swf格式的电子书文件配套学习书籍之一,供学习爱好者方便学习
PTC_Creo_3.0_M040_Win64破解文件
学习和使用CROE通常需要一定的数学和编程背景,特别是线性代数、概率论和统计学知识。此外,熟悉金融市场的运作和投资原理也是必不可少的。如果你是初学者,建议从官方文档、教程或在线课程开始,逐步了解CROE的功能...
**Creo 模型拼接拉伸技巧详解** 在三维建模软件Creo中,模型拼接拉伸是一项重要的设计技巧,它可以帮助设计师构建复杂的几何形状。本教程将通过一个具体的实例来阐述如何运用这一技术。 ### 步骤一:创建外形特征 ...
- **应用场景**:在处理大型图纸时,如果需要批量删除对象,可以启用此选项以提高效率。 ##### allow_workpiece_silhouette - **说明**:此选项决定了工件是否可用于创建轮廓加工窗口。 - **值**: - `yes`:允许...
在C++编程中,捕获内存相关错误并生成dump文件是一项关键的技术...对于`DUMP_C++_dump_`这个主题,学习如何在C++代码中正确地捕获异常、设置调试钩子以及使用调试工具分析dump文件,是每一个高级C++开发者必备的技能。
Creo 3.0 表述式曲线知识点大全 Creo 3.0 表述式曲线是 Pro/Engineer(PROE)软件中的一个功能强大且灵活的设计工具,allows users to create complex curves using mathematical equations. 这种曲线可以应用于...
jchardet是一个基于Mozilla自动字符集探测算法的Java移植版,最初由Frank Tang开发,后来被移植到Java。这个库可以极大地帮助Java开发者解决编码识别问题。要使用jchardet,首先需要将其引入到项目中。然后,需要...
总结来说,这个压缩包提供了一整套钢管切割机的Creo 7.0设计资料,涵盖了从零部件到整体工程图的全面信息,是学习机械设计、了解切割机结构或进行定制设计的宝贵资源。通过解压并探索这些文件,用户可以深入了解Creo...
总结而言,钣金折弯系数是确保钣金零件设计精确度和制造效率的关键因素之一。通过正确计算和应用折弯系数,设计师可以精确控制钣金件的尺寸和形状,保证产品质量,减少生产成本。对于钣金设计和制造行业而言,掌握...
在三维建模软件Creo 3.0中,配置文件(.prf文件)是控制程序行为和用户界面的关键元素。这些文件允许用户根据个人习惯和项目需求定制软件的各个方面,包括显示设置、单位系统、内存分配、启动选项等。...
proe 5.0的造型设计设计类型为手机,可为初次设计者提供参考