`
phinecos
  • 浏览: 345006 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

小谈java中的对象序列化

 
阅读更多
java对象序列化机制一般来讲有两种用途:
1.需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态
2.使用套接字在网络上传送对象的程序来说,是很有用的。
我们通过让类实现java.io.Serializable 接口可以将类序列化。这个接口是一个制造者(marker)接口。也就是说,对于要实现它的类来说,该接口不需要实现任何方法。它主要用来通知Java虚拟机(JVM),需要将一个对象序列化。
对于这个,有几点我们需要明确:
1.并非所有类都可以序列化,在cmd下,我们输入serialver java.net.socket,可以得到socket是否可序列化的信息,实际上socket是不可序列化的。
2.java有很多基础类已经实现了serializable接口,比如string,vector等。但是比如hashtable就没有实现serializable接口。
将对象读出或者写入流的主要类有两个: ObjectOutputStream与ObjectInputStream 。ObjectOutputStream 提供用来将对象写入输出流的writeObject方法, ObjectInputStream提供从输入流中读出对象的readObject方法。使用这些方法的对象必须已经被序列化的。也就是说,必须已经实现Serializable接口。如果你想writeobject一个hashtable对象,那么,会得到一个异常。
下面举个例子:
packagecom.vitamin.Console;
importjava.io.*;

importcom.sun.org.apache.bcel.internal.classfile.JavaClass;

classStudentimplementsSerializable
{
publicStringname;
publicintage;
publicStudent()
{

}

publicStudent(Stringname,intage)
{
this.name=name;
this.age=age;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intage){
this.age=age;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}


}

publicclasstest
{

publicstaticvoidmain(String[]args)
{
//TODO自动生成方法存根
Studentstu1=newStudent("phinecos",20);
Studentstu2
=null;
try
{
ObjectOutputStreamout
=newObjectOutputStream(newFileOutputStream("c://a.data"));
out.writeObject(stu1);
out.flush();
out.close();


}

catch(Exceptionex)
{
System.err.println(ex.getMessage().toString());
}

try
{
ObjectInputStreamin
=newObjectInputStream(newFileInputStream("c://a.data"));
stu2
=(Student)in.readObject();
in.close();
}

catch(Exceptione)
{
stu2
=newStudent();
}

System.out.println(
"Originaldata:"+stu2.getName()+""+stu2.getAge());

}


}

分享到:
评论

相关推荐

    深入剖析Java编程中的序列化

    主要介绍了深入剖析Java编程中的序列化,文中谈到了序列化时对象的继承等各种问题,案例详尽,强烈推荐!需要的朋友可以参考下

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    9.1.4 对象XML序列化 227 9.2 练习 228 9.2.1 我的联系手册(JPA实现) 228 9.2.2 我的联系手册(JAXB实现) 238 9.3 小结 242 第10章 准备环球旅行——应用程序国际化 243 10.1 讲解 244 10.1.1 概念介绍 ...

    Java SE实践教程 源代码 下载

    9.1.4 对象XML序列化 227 9.2 练习 228 9.2.1 我的联系手册(JPA实现) 228 9.2.2 我的联系手册(JAXB实现) 238 9.3 小结 242 第10章 准备环球旅行——应用程序国际化 243 10.1 讲解 244 10.1.1 概念介绍 ...

    Java SE实践教程 pdf格式电子书 下载(一) 更新

    9.1.4 对象XML序列化 227 9.2 练习 228 9.2.1 我的联系手册(JPA实现) 228 9.2.2 我的联系手册(JAXB实现) 238 9.3 小结 242 第10章 准备环球旅行——应用程序国际化 243 10.1 讲解 244 10.1.1 概念介绍 ...

    asp.net知识库

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

    Scala程序设计(第2版)

    11.7 对象层次结构的线性化算法 282 11.8 本章回顾与下一章提要 287 第12章 Scala集合库 288 12.1 通用、可变、不可变、并发以及并行集合 288 12.1.1 scala.collection包 289 12.1.2 collection....

    c#学习笔记.txt

    在类中,必须初始化实例对象. 使用 new 运算符创建结构对象时,将创建该结构对象,并且调用适当的构造函数。与类不同的是,结构的实例化可以不使用 new 运算符。如果不使用 new,那么在初始化所有字段之前,字段将...

    Python核心编程第二版(ok)

     6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   7.1.3 如何更新字典   7.1.4 如何删除字典...

    Python核心编程第二版

     6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.1.1 如何创建字典和给字典赋值   7.1.2 如何访问字典中的值   7.1.3 如何更新字典   7.1.4 如何删除字典...

    Python 核心编程 第二版

     6.21 序列类型小结   6.22 练习   第7章 映像和集合类型   7.1 映射类型:字典   7.2 映射类型操作符   7.3 映射类型的内建函数和工厂函数   7.4 映射类型内建方法   7.5 字典的键   7.6...

    C#微软培训资料

    18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间成员速查.269 参 考 资 料 .300 <<page 4>> page begin==================...

    net学习笔记及其他代码应用

    30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System....

    VC与Labview、Matlab编程论文资料[2].rar

    Java可视化集成开发环境的研究与实现.pdf Java调用VC_DLL实现串口GPS的访问.pdf LabVIEW_快速构建步进电机控制系统的利器.pdf LabVIEW下普通数据采集卡的驱动与调用.pdf LabVIEW下远程虚拟实验室的研究与实现....

    VC与Labview、Matlab编程论文资料

    Java可视化集成开发环境的研究与实现.pdf Java调用VC_DLL实现串口GPS的访问.pdf LabVIEW_快速构建步进电机控制系统的利器.pdf LabVIEW下普通数据采集卡的驱动与调用.pdf LabVIEW下远程虚拟实验室的研究与实现....

    VC与Labview、Matlab编程论文资料[4].rar

    Java可视化集成开发环境的研究与实现.pdf Java调用VC_DLL实现串口GPS的访问.pdf LabVIEW_快速构建步进电机控制系统的利器.pdf LabVIEW下普通数据采集卡的驱动与调用.pdf LabVIEW下远程虚拟实验室的研究与实现....

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

    IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门经典(第4版)》和《C++入门经典(第3版)》。 译者  杨浩,知名译者,大学讲师,从事机械和计算机方面的教学和研究多年,发表论文数篇,参编和翻译的...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    14.10 序列化事务 403 14.11 隔离事务 406 14.12 自治事务 409 14.13 小结 413 第15章 测试与质量保证 415 15.1 测试用例 416 15.2 测试方法 417 15.3 单元测试 418 15.4 回归测试 422 15.5 模式修改 422 ...

Global site tag (gtag.js) - Google Analytics