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

    首先解释两个概念,何为序列化?何为反序列化?

    序列化:将对象转化成流的过程称为序列化

    反序列化:将流转化成对象的过程称之为反序列化

    序列化与反序列化必须遵守的原则

    a)         Java对象

    在java中要想使一个java对象可以实现序列化与反序列化,必须让该类实现java.io.Serializable接口

    java.io.Serializable接口定义如下:

    publicinterface Serializable {

    }

    从上述定义中可以看到该接口中未定义任何方法,这大大的简化了开发者

    b)      序列化主要依赖java.io.ObjectOutputStream类,该类对java.io.FileOutputStream进一步做了封装,这里主要使用ObjectOutputStream类的writeObject()方法实现序列化功能

    Demo:

    /**

         *将对象序列化到磁盘文件中

         *@paramo

         *@throwsException

         */

        publicstaticvoid writeObject(Object o) throws Exception{

           File f=new File("d:""user.tmp");

           if(f.exists()){

               f.delete();

           }

           FileOutputStream os=new FileOutputStream(f);

           //ObjectOutputStream 核心类

           ObjectOutputStream oos=new ObjectOutputStream(os);

           oos.writeObject(o);

           oos.close();

           os.close();

        }

    c)      反序列化主要依赖java.io.ObjectInputStream类,该类对java.io.InputStream进一步做了封装,这里主要使用ObjectInputStream类的readObject()方法实现序列化功能

    Demo:

    /**

         *反序列化,将磁盘文件转化为对象

         *@paramf

         *@return

         *@throwsException

         */

        publicstatic User readObject(File f) throws Exception{

           InputStream is=new FileInputStream(f);

           //ObjectOutputStream 核心类

           ObjectInputStream ois=new ObjectInputStream(is);

           return (User)ois.readObject();

        }

    贴出完整的demo

    Java对象:

    package com.io.bean;

    import java.io.Serializable;

    publicclass User implements Serializable {

       

        privateintuserId;

        private String userName;

        private String userSex;

        privateintuserAge;

        publicint getUserAge() {

           returnuserAge;

        }

        publicvoid setUserAge(int userAge) {

           this.userAge = userAge;

        }

        publicint getUserId() {

           returnuserId;

        }

        publicvoid setUserId(int userId) {

           this.userId = userId;

        }

        public String getUserName() {

           returnuserName;

        }

        publicvoid setUserName(String userName) {

           this.userName = userName;

        }

        public String getUserSex() {

           returnuserSex;

        }

        publicvoid setUserSex(String userSex) {

           this.userSex = userSex;

        }

        @Override

        public String toString() {

           returnthis.getUserId() + "   " + this.getUserName() + "   "

                  + this.getUserSex() + "    " + this.getUserAge();

        }

    }

    序列化与反序列化

    package com.io.test;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.InputStream;

    import java.io.ObjectInputStream;

    import java.io.ObjectOutputStream;

    import com.io.bean.User;

    publicclass TestSerializable {

        /**

         *将对象序列化到磁盘文件中

         *@paramo

         *@throwsException

         */

        publicstaticvoid writeObject(Object o) throws Exception{

           File f=new File("d:""user.tmp");

           if(f.exists()){

               f.delete();

           }

           FileOutputStream os=new FileOutputStream(f);

           //ObjectOutputStream 核心类

           ObjectOutputStream oos=new ObjectOutputStream(os);

           oos.writeObject(o);

           oos.close();

           os.close();

        }

       

        /**

         *反序列化,将磁盘文件转化为对象

         *@paramf

         *@return

         *@throwsException

         */

        publicstatic User readObject(File f) throws Exception{

           InputStream is=new FileInputStream(f);

           //ObjectOutputStream 核心类

           ObjectInputStream ois=new ObjectInputStream(is);

           return (User)ois.readObject();

        }

       

       

        publicstaticvoid main(String[] args) throws Exception{

          

           /*****************将对象序列化***************/

          

        /* 

            User user=new User();

           user.setUserId(1);

           user.setUserName("张艺谋");

           user.setUserSex("男");

           user.setUserAge(50);

           TestSerializable.writeObject(user);

        */

          

           /*****************将对象序反列化***************/

          

           User user=TestSerializable.readObject(new File("d:""user.tmp"));

           System.out.println(user);

        }

    }

  • 相关阅读:
    BZOJ1218:[HNOI2003]激光炸弹
    洛谷【P3407】散步
    洛谷【P1142】轰炸
    洛谷【P1358】扑克牌
    洛谷【P1236】算24点
    洛谷【P2003】平板
    TVYJ1266:费解的开关
    POJ1958:Strange Towers of Hanoi
    孤独地、凄惨地AK
    ios---scrollview用法总结
  • 原文地址:https://www.cnblogs.com/littleCode/p/4083148.html
Copyright © 2011-2022 走看看