本文为大家解析java中可序列化的接口的作用,具体内容如下
1。(序列化)主要支持对象的回复,所以可以用来保存当前的程序系统状态,远程方法调用RMI(远程机器必须含有必要的. class文件,否则将掷出classNotFound ,例外),但是因为它将对象数据自动全部保存,你根本无法插手,因此对于一些敏感字段(如:密码)存在安全问题。但相应有很多解决的方法,例如可以在敏感字段的声明中使用瞬时关键字,或者去继承外部化接口,自己来实现readExternal()和writerExternal()方法,再或者继承可序列化的接口,但提供private ,void ,writeObject (ObjectOutputStream ,s)等方法……,,…但注意static ,成员的保存仍需要你的介入。
2.1。网络传输,,,
2。数据库持久,,,
3。把对象保存为文件形式,以便以后还原,
<强>对象序列化的定义:
强>
对象序列化允许你将实现了可序列化的接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
序列化不但可以在本机做,而且可以经由网络操作(RMI)。这个好处是很大的- - - - -因为它自动屏蔽了操作系统的差异,字节顺序(用Unix下的c开发过网络编程的人应该知道这个概念)等。比如,在窗口平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。
<强>对象序列化主要用来支持2种主要的特性:
强> 1,Java的RMI(远程方法调用).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到序列化机制来发送参数和接收返回直。
2, Java的javabean。Bean的状态信息通常是在设计时配置的.Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要序列化机制。
二,sakulagi和rollingpig说的持久化我也说一下。
我觉得你们说的应该是英文里的持久性。但是Java语言里现在只支持轻量级的持久性、就是轻量级持久化,这是通过序列化机制来实现的。
持久性是指一个对象的生命周期不由程序是否执行来决定,即使是在程序终止时这个对象也存在。它把一个序列化的对象写到磁盘(本机或其他机器上的非内存存储器),并在程序重新调用时再读取对象到通常的RAM存储器。
为什么说Java序列化的机制实现的是轻量级的持久性# 63;因为你必须显式的序列化和反序列化程序里的对象,而不是直接由一个关键词来定义一个对象是序列化的然后由系统做相应的处理。
下面是关于序列化的一个实例:
程序名称:SerializationDemo。java
程序主题:实现对象的序列化和反序列化
程序说明:该程序由实例化一个MyClass类的对象开始,该对象有三个实例变量,类型分别为字符串,int,翻倍,是希望存储和恢复的信息。
代码内容
进口. io . *; 公开课SerializationDemo { 公共静态void main (String参数[]){//对象序列化 尝试{ MyClass中的object1=new MyClass (“Hello”7 2.7 e10); System.out.println(“中的object1:“+中的object1); FileOutputStream安全系数=new FileOutputStream(“串行”); ObjectOutputStream oos=new ObjectOutputStream (fos)提交; oos.writeObject(中的object1); oos.flush (); oos.close (); } 捕获(异常e) { system . out。println(“序列化期间例外:“+ e); system . exit (0); }//反序列化对象 尝试{ MyClass object2; FileInputStream fis=new FileInputStream(“串行”); ObjectInputStream ois=new ObjectInputStream (fis); object2=(MyClass) ois.readObject (); ois.close (); System.out.println (“object2:“+ object2); } 捕获(异常e) { system . out。println(“反序列化期间例外:“+ e); system . exit (0); } } } 类MyClass实现Serializable { 字符串年代; int我; 双d; 公共MyClass(字符串,int i,双d) { 这点=s; 我=我; this.d=d; } 公共字符串toString () { 返回“s=" + s +”;我=" +我+”;d=" + d; } } >之前程序运行结果:中的object1和object2的实例变量是一样的,输出如下:[代码:1:a55efb5f91]中的object1: s=你好,我=7;d=2.7 e10
java中可序列化的接口作用详解