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();
            }
            
            
        }
    
    }
  • 相关阅读:
    [转载]如何让企业网站发挥出应用的功能?
    [转载]创业流程
    velocity foreach跳出循环
    【转】cgi技术
    webx3 日志系统级别问题
    ibatis主键自增用法
    【转】java内部类总结
    java初始化顺序
    一点一点学习Ubuntu
    jboss 的端口修改
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/12887419.html
Copyright © 2011-2022 走看看