我们知道Serializable接口里面没有任何方法  但一个类实现了这个接口 就能序列化 我想问下 Serializable接口里面没有任何方法 它是怎么序列化的 由它的子类完成? 但它的子类跟我写的实体类没有任何关系啊  难道实现了接口 就能和接口的实现类相关联 Serializable接口里面没有方法 就不能完成多态  越想脑壳越昏  谁来解答一下小弟的疑惑 

解决方案 »

  1.   

    ObjectOutputStream 和 ObjectInputStream分别与FileOutpuStream和FileInputStream一起使用时
    可以为程序提供对对象图形的持久性存储。
    其优点是:即使程序运行结束,对象仍然可以保存下来。必须实现Serializable接口。
    一个类想实现序列化,必须实现Serializable接口。
    若某个属性不要求进行序列化,则使用关键字transient
    class Person implements Serializable{
    private String name;
    //private int age;
    private transient int age;
    public Person(String name ,int age){
    this.name = name;
    this.age=age;
    }public String toString(){
    return this.name+" "+this.age;
    }
    }public class SerializableTest{
    public static void main(String args[])throws Exception{
    Person p = new Person("lilei",23);
    ObjectOutputStream oos = null;
    //开始序列化
    oos = new ObjectOutputStream(new FileOutputStream(new File("D:\\myTest.txt")));
    oos.writeObject(p);
    //反序列化
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("D:\\myTest.txt")));
    Person p1 = (Person)ois.readObject();
    System.out.println(p1);
    ois.close();
    oos.close();}
    }
      

  2.   

    Serializable只是一个标记,代表这个类是可以序列化的,就这么简单。
    不是所有接口都必须有成员方法的。
    比如Servlet,如果实现了SingleThread的话,web服务器就对客户的每次请求都创建一次该Servlet的实例,请求结束后销毁(perl的cgi程序就是如此)。否则,所有请求都用同一个Servlet的实例。
      

  3.   

    确实起标识作用,jvm会按照这个标识去调用本地方法实现序列化。
      

  4.   

    你了解Cloneable接口么?差不多的道理
      

  5.   

    这个就是看java怎么处理的
    只是个标识
    好比给你开着120救护车 管你车里坐的什么人
    一样都可以飙车闯红灯了java就任这个标识 当你是120了 所以放行
      

  6.   

    Serializable只是标识哪个类可以被序列化。真正的序列化是由IO完成的。
      

  7.   

    Serializable 作为标记接口。所有的序列化实现方法都需要在序列化之前写一段这样的代码:if(!(obj instanceof Serializable)) {
        throw new XxxxxXxxxException();
    }只是人为地检查一下,标记这个类属于可序列化的类。
      

  8.   

    Serializable只是标记接口,无具体要实现的方法...
      

  9.   

    仅仅是 JVM 里面规定的,有一个原因就是:对于可能产生泄密的情况,安全的原则是”没有明确允许就表示禁止“,在 Java 中也是如此,如果一个类没有实现 Serializable 接口就表示设计者并没有打算让它可以通过序列化保存到磁盘或通过网络发送出去,那就等于多了一个不安全的因素,否则的话人家的程序就可以把所有的对象都通过网络发送出去,然后在另一个台机器上还原出来,岂不是复制了一份?