java 序列化

Java序列化Serialization:是一种 将对象转化成流的过程Java反序列化deserialization:是一种 将流转化成对象的过程

序列化的必要性

    Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议

需要序列化的情况
  •     当你想把的内存中的对象保存到一个文件中或者数据库中时候;
  •     当你想用套接字在网络上传送对象的时候;
  •     当你想通过RMI传输对象的时候;

特点

  1.   如果某个类能够被串行化,其子类也可以被串行化。
  2. 声明为statictransient类型的成员数据不能被串行化。
  3. 对于父类的处理,如果父类没有实现串行化接口,则其必须有默认的构造函数(即没有参数的构造函数)。否则编译的时候就会报错。在反串行化的时候,默认构造函数会被调用。但是若把父类标记为可以串行化,则在反串行化的时候,其默认构造函数不会被调用。
  4. writeObject和readObject本身就是线程安全的,传输过程中是不允许被并发访问的。所以对象能一个一个接连不断的传过来

案例

import java.io.*;

public class Cat implements Serializable {

        private String name;

        public Cat () {

                this.name = "new cat";

        }

        public String getName() {

                return this.name;

        }

        public void setName(String name) {

                this.name = name;

        }

        public static void main(String[] args) {         

                Cat cat = new Cat();

                try {

                        FileOutputStream fos = new FileOutputStream("catDemo.out");

                        ObjectOutputStream oos = new ObjectOutputStream(fos);

                        System.out.println(" 1> " + cat.getName());

                        cat.setName("My Cat");                       

                        oos.writeObject(cat);

                        oos.close();                       

                } catch (Exception ex) {  ex.printStackTrace();   }

                try {

                        FileInputStream fis = new FileInputStream("catDemo.out");

                        ObjectInputStream ois = new ObjectInputStream(fis);

                        cat = (Cat) ois.readObject();

                        System.out.println(" 2> " + cat.getName());

                        ois.close();

                } catch (Exception ex) {

                        ex.printStackTrace();

                }

        }

}

参考:

1.http://blog.csdn.net/yakihappy/article/details/3979373

2.http://wujuxiang.blog.51cto.com/2250829/430211(transient关键字使用注意)

你可能感兴趣的:(java 序列化)