0
点赞
收藏
分享

微信扫一扫

java序列化


基础思想

1.将要序列化的类实现 Serializable 

2.将类序列化到文件

3.将文件反序列化

4.获取类中内容

 

序列化实例

package com.abs.base;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* java 序列化
* @author yushen
*
*/
public class TestSerial implements Serializable {

/**
* 定义使用数据内容
*/
public byte version = 100;
public static byte count = 0;

/**
* 启动
* @param args
* @throws IOException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws IOException, ClassNotFoundException {
//生成文件
FileOutputStream fos = new FileOutputStream("temp.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
TestSerial corg = new TestSerial();
//把类输入文件中
oos.writeObject(corg);
oos.flush();
oos.close();

System.out.println("cont值:"+corg.count +" "+"version值:"+corg.version);
//修改一个数据的值
TestSerial.count = 9;

//获取文件
FileInputStream fis = new FileInputStream("temp.out");
ObjectInputStream si = new ObjectInputStream(fis);
TestSerial cnew = (TestSerial) si.readObject();
//输出字段
System.out.println("cont值:"+cnew.count +" "+"version值:"+cnew.version);

}
}

 

日志

cont值:0    version值:100
cont值:9 version值:100

 

序列化重点

序列化的两种特性:

         1.Java 的RMI使本来存在于其他机器的对象可以表现出就象本地机器上的行为
         2.将消息发给远程对象时,需要通过对象序列化来传输参数和返回值.

序列化目的:

        1.支持运行在不同虚拟机上不同版本类之间的双向通讯;
        2.定义允许JAVA类读取用相同类较老版本写入的数据流的机制;
        3.定义允许JAVA类写用相同类较老版本读取的数据流的机制;
        4.提供对持久性和RMI的序列化;
        5.产生压缩流且运行良好以使RMI能序列化;
        6.辨别写入的是否是本地流;
        7.保持非版本化类的低负载;

序列化类规范

        1,.只序列化对象的非静态成员变量,不能序列化任何成员方法和静态成员变量。
        2,如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存。
        3.如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。可以通过将这个引用标记为transient,那么对象仍然可以序列化。对于一些比较敏感的不想序列化的数据,也可以采用该标识进行修饰。
 

 

java序列化简介

        序列化就是指对象通过写出描述自己状态的数值来记录自己的过程,即将对象表示成一系列有序字节,java提供了将对象写入流和从流中恢复对象的方法。对象能包含其它的对象,而其它的对象又可以包含另外的对象。JAVA序列化能够自动的处理嵌套的对象。对于一个对象的简单域,writeObject()直接将其值写入流中。当遇到一个对象域时,writeObject()被再次调用,如果这个对象内嵌另一个对象,那么,writeObject()又被调用,直到对象能被直接写入流为止。程序员所需要做的是将对象传入ObjectOutputStream的writeObject()方法,剩下的将有系统自动完成。

         要实现序列化的类必须实现的java.io.Serializable或java.io.Externalizable接口,否则将产生一个NotSerializableException。该接口内部并没有任何方法,它只是一个"tagging interface",仅仅"tags"它自己的对象是一个特殊的类型。类通过实现 java.io.Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。

举报

相关推荐

0 条评论