Java序列化與反序列化

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);

    }

}

首先解釋兩個概念,何爲序列化?何爲反序列化?

序列化:將對象轉化成流的過程稱爲序列化

反序列化:將流轉化成對象的過程稱之爲反序列化

序列化與反序列化必須遵守的原則

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();

    }

   

   

    public static void 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);

    }

}






發佈了11 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章