文档章节

java序列化与反序列化

passionfly
 passionfly
发布于 2015/02/13 18:27
字数 554
阅读 18
收藏 1
点赞 1
评论 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
粉丝 13
博文 106
码字总数 76465
作品 0
西安
加载中

评论(1)

-飞客-
-飞客-
好帖子!79
Java序列化之Serializable

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

村长大神 ⋅ 05/08 ⋅ 0

Java序列化技术即将被废除!!!

我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据...

Java技术栈 ⋅ 05/30 ⋅ 0

Java反序列化漏洞的原理分析

  *本文原创作者:Moonlightos,本文属FreeBuf原创奖励计划,未经许可禁止转载   世界上有三件事最难:      把别人的钱装进自己的口袋里   把自己的想法装进别人的脑袋里   让自...

FreeBuf ⋅ 05/04 ⋅ 0

为什么我墙裂建议大家使用枚举来实现单例

我们知道,单例模式,一般有七种写法,那么这七种写法中,最好的是哪一种呢?为什么呢?本文就来抽丝剥茧一下。 哪种写单例的方式最好 在StakcOverflow中,有一个关于What is an efficient ...

冷_6986 ⋅ 06/13 ⋅ 0

为什么我墙裂建议大家使用枚举来实现单例。

关于单例模式,我的博客中有很多文章介绍过。作为23种设计模式中最为常用的设计模式,单例模式并没有想象的那么简单。因为在设计单例的时候要考虑很多问题,比如线程安全问题、序列化对单例的...

⋅ 06/10 ⋅ 0

spring-boot-starter-grpc 实现原理

RPC 流程 1、服务调用方(Client)将远程方法的信息(如类名、方法方法名、方法传入的参数)封装为统一的请求体; 2、序列化请求对象,转化为二进制串,方便传输; 3、通过 Client Stub 发送...

Anoyi ⋅ 05/20 ⋅ 0

WebLogic反序列化漏洞(CVE-2018-2628)漫谈

  漏洞简介   2018年4月18日,Oracle官方发布了4月份的安全补丁更新CPU(Critical Patch Update),更新中修复了一个高危的 WebLogic 反序列化漏洞CVE-2018-2628。攻击者可以在未授权的情...

FreeBuf ⋅ 04/26 ⋅ 0

Jackson工具类使用及配置指南、高性能配置(转)

Jackson使用工具类 通常,我们对JSON格式的数据,只会进行解析和封装两种,也就是以及。 public class JsonUtils { Logger for this class } 将json string反序列化成对象 @param json @par...

easonjim ⋅ 02/16 ⋅ 0

Java序列化之Externalizable

1.需求 使用Externalizable实现序列化 2.Externalizable源码 public interface Externalizable extends java.io.Serializable { The object implements the writeExternal method to save it......

村长大神 ⋅ 05/08 ⋅ 0

甲骨文称 Java 序列化的存在是个错误,计划删除

甲骨文计划从 Java 中去除序列化功能,因其在安全方面一直是一个棘手的问题。 Java 序列化也称为 Java 对象序列化,该功能用于将对象编码为字节流...Oracle 的 Java 平台小组的首席架构师 Ma...

达尔文 ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 15分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 26分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 44分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 51分钟前 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部