文档章节

java序列化与反序列化

passionfly
 passionfly
发布于 2015/02/13 18:27
字数 554
阅读 18
收藏 1

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

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

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

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

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

完整代码:

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



























本文转载自:http://www.blogjava.net/sxyx2008/

共有 人打赏支持
passionfly
粉丝 15
博文 106
码字总数 76465
作品 0
西安
私信 提问
加载中

评论(1)

-飞客-
-飞客-
好帖子!79
Java序列化与JSON序列化大比拼

一、背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做。所以我们还是比比吧。 Java观点:Object2Object,使用时简单快速。 JSON观点:JSON格式与语...

NoahX
2013/03/10
0
20
Android Serializable与Parcelable原理与区别

一、序列化、反序列化是什么? (1) 名词解释 对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程。 对象的反序列化:把字节序列恢复为Java对象的过程。 (2) 序列化详细解释 ...

KingMing
2015/04/16
0
0
Java序列化之Serializable

1.需求 1.什么是Java序列化 2.详解 1.序列化 理解为"打碎"即可 2.在书本上序列化的意思是将Java对象转为二进制 3.java平台允许我们在内存中创建对象,当JVM运行时对象才能存在,如果JVM停止,对...

村长大神
2018/05/08
0
0
序列化框架比较:kryo & hessian & Protostuff & java

序列化框架性能对比(kryo、hessian、java、protostuff) 简介: 优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Protostuff 速度快,基于protobuf ...

鉴客
2013/03/04
11K
0
Serializable & Parcelable

对象序列化的简单介绍 所谓对象的序列化其实就是把JVM运行过程中生成的对象通过特殊的处理手段转换为字节形式的文件。转换之后就可以将其永久保存到磁盘中,或者以字节流进行网络传输。 在A...

吴七禁
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

给windows server中的“未识别的网络”或“无法识别的网络”设置网络位置类型

在windows server中,如果网络没有被正确的识别,那么就需要手工设置一下网络位置类型。 将“公用网络”指定设置为“专用网络“ 【控制面板】--【系统和安全】--【管理工具】--【本地安全策略...

gugudu
45分钟前
1
0
阿里强制要求的21条Java开发规范,可以避免很多坑

1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 2. 【强制】所有的覆写方法,必须加@Override注解。 说明:getObject...

天王盖地虎626
今天
6
0
oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time ......

hnairdb
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linux-tao
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxprobe16
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部