zoukankan      html  css  js  c++  java
  • JAVA对象序列与反序列化

    一般我们把对应特征写入文件叫序列化,把文件动态变成对象叫反序列化。序列化为文件是常用做法。

    能够序列化的类必须实现java.io.Serializable接口,一个类对象是否可以序列化只要查看此类是否实现java.io.Serializable即可判断。

    如果有的属性不需要序列化,则可用transient标记。

    序列华思路:

     1.用FileOutputStream关联对应的文件

     2.ObjectOutputStream关联1中的流对象

     3.用2中的对象流writeObject写入对象数据

     4.关闭对象流和文件流

    反序列化思路:

    1.用FileInputStream关联对应的文件

    2.用ObjectInputStream关联1中的流

    3.用2中的对应流readObject获对象(强类型转换)

     4.关闭对象流和文件流

    import java.io.*;
     final class Employee implements Serializable
    {
        public String  nameString;
        public String Address;
        public transient int SSN;
        public int number;
        public void mailCheck() {
            System.out.println("Mailing a check to " + nameString
                    + " " + Address);
        
        }
        
    }
    public class mytest {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            /*序列化*/
         Employee employee=new Employee();
         employee.Address="北京復興大街一號";
         employee.nameString="新華書店";
         employee.SSN=1234;
         employee.number=86943;
         try {
            FileOutputStream os=new FileOutputStream("d:\ser.ser");
            ObjectOutputStream oos=new ObjectOutputStream(os);
            oos.writeObject(employee);
            oos.close();
            os.close();
            System.out.println("Serialized data is saved in d:\ser.ser");
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        
        
            /*反序列化    */
            Employee em;
            try {
                FileInputStream fs=new FileInputStream("d:\ser.ser");
                ObjectInputStream ois=new ObjectInputStream(fs);
                em=(Employee)ois.readObject();
               ois.close();
               fs.close();
               System.out.println("Deserialized Employee...");
                  System.out.println("Name: " + em.nameString);
                  System.out.println("Address: " + em.Address);
                  System.out.println("SSN: " + em.SSN);
                  System.out.println("Number: " + em.number);
            } catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            
            
        }
    
    }
  • 相关阅读:
    从Swift3的标准库协议看面向协议编程(一)
    iOS多线程到底不安全在哪里?
    typealias和泛型接口
    iOS蓝牙开发CoreBluetooth快速入门
    iOS学习路线图
    iOS开发masonry的一些使用简介
    在Swift项目中使用cocoaPods导入第三方OC库
    微信小程序开发POST请求
    一些NSArray,NSDictionary,NSSet相关的算法知识
    iOS开发中的权限
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/12887419.html
Copyright © 2011-2022 走看看