zoukankan      html  css  js  c++  java
  • Java 序列化Serializable

    a)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

    b)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

    c) static,transient后的变量不能被序列化;

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

    如果我们想要序列化一个对象,首先要创建某些OutputStream(如FileOutputStream、ByteArrayOutputStream等),然后将这些OutputStream封装在一个ObjectOutputStream中。这时候,只需要调用writeObject()方法就可以将对象序列化,并将其发送给OutputStream记住:对象的序列化是基于字节的,不能使用Reader和Writer等基于字符的层次结构。而反序列的过程(即将一个序列还原成为一个对象),需要将一个InputStream(如FileInputstream、ByteArrayInputStream等)封装在ObjectInputStream内,然后调用readObject()即可。

    序列化:

    MyTest类需要implements Serializable

    ObjectOutputStream oos = new ObjectOutputStream(newFileOutputStream("my.out"));//ObjectOutputStream能把Object输出成Byte流
                MyTest myTest=new MyTest();
                oos.writeObject(myTest);
                oos.flush();  //缓冲流
                oos.close(); //关闭流

    反序列化:

      ObjectInputStream oin = null;//局部变量必须要初始化
            try
            {
                oin = new ObjectInputStream(new FileInputStream("my.out"));
            catch (FileNotFoundException e1)
            {       
                e1.printStackTrace();
            catch (IOException e1)
            {
                e1.printStackTrace();
            }     
            MyTest mts = null;
            try {
                mts = (MyTest ) oin.readObject();//由Object对象向下转型为MyTest对象
  • 相关阅读:
    F广搜
    Python中range和xrange的异同之处
    数组中出现次数超过一半的数字
    iOS开发之剖析"秘密"App内容页面效果(一)
    Balloon Comes!
    scikit-learn: isotonic regression(保序回归,非常有意思,仅做知识点了解,但差点儿没用到过)
    C#数据缓存介绍及Caching通用帮助类整理
    SVN Working copying 'xxxxx/xxxx/xxxx' locked
    读书笔记-APUE第三版-(7)进程环境
    UVA 10555
  • 原文地址:https://www.cnblogs.com/yingchen/p/5196151.html
Copyright © 2011-2022 走看看