• 先创建一个实现了Serializable接口的对象
    import java.io.Serializable;

    /**
* 可序列化Person对象.
* @author Ramer
* Sep 18, 2016
*/
public class SerializablePerson implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private String alia;
private Integer age; public SerializablePerson() {
} public SerializablePerson(String name, String alia, Integer age) {
this.name = name;
this.alia = alia;
this.age = age;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public void setAlia(String alia) {
this.alia = alia;
} public void setName(String name) {
this.name = name;
} public String getAlia() {
return alia;
} public String getName() {
return name;
} /**
* 序列化写入对象前会调用本方法,可调试ObjectInputStream.writeObject方法
*
* @param stream the stream
* @throws IOException Signals that an I/O exception has occurred.
*/
private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException {
// 模拟加密age属性
age = age << 2;
stream.defaultWriteObject();
} /**
* 反序列化读取对象前会调用本方法,可调试ObjectInputStream.readObject方法.
*
* @param stream the stream
* @throws IOException Signals that an I/O exception has occurred.
* @throws ClassNotFoundException the class not found exception
*/
private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException {
stream.defaultReadObject();
// 解密age属性
age = age >> 2;
} @Override
public String toString() {
return "Person [name=" + name + ", alia=" + alia + ", age=" + age + "]";
}
}
  • 序列化对象到本地文件
public void serializationTest() {
String file = "testSrc/person.ser";
SerializablePerson person = new SerializablePerson("ramer", "feng", 4);
try (FileOutputStream out = new FileOutputStream(file);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(out);) {
objectOutputStream.writeObject(person);
} catch (Exception e) {
e.printStackTrace();
}
}
  • 从指定文件反序列化对象
public void deserializationTest() {
String file = "testSrc/person.ser";
try (FileInputStream out = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(out);) {
SerializablePerson person = (SerializablePerson) objectInputStream.readObject();
System.out.println("name: " + person.getName());
System.out.println("alia: "+ person.getAlia());
System.out.println("age: " + person.getAge());
} catch (Exception e) {
e.printStackTrace();
}
}
  • 在对象序列化时,即调用objectInputStream.writeObject()方法时,会调用实例对象的writeObject()方法,在该方法中,可以实现对某些敏感字段的加密(比如这里的age).
    请注意: 要序列化对象的writeObject() 和readObject()方法签名必须和我上面的一致,否则加密将不会起作用.
  • 转载 http://blog.csdn.net/u011699931/article/details/52587647

Java 对象的序列化和反序列化的更多相关文章

  1. Java对象的序列化与反序列化

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...

  2. Java对象的序列化和反序列化[转]

    Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...

  3. Java对象的序列化与反序列化-Json篇

    说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输.或者在RPC(远程方法调用)时可 ...

  4. 一文带你全面了解java对象的序列化和反序列化

    摘要:这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍,希望能对大家有所帮助. 本文分享自华为云社区<java中什么是序列化和反序列化?>, ...

  5. Java基础学习总结——Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  6. Java对象的序列化和反序列化

    对象的序列化是指将对象转换为字节序列的过程 对象的反序列化是指将字节序列恢复对象的过程 主要有两种用途: 1.把对象的字节序列永久地保存在硬盘上,通常放在一个文件中. 2.在网络上传输对象的字节序列. ...

  7. java对象的序列化与反序列化使用

    1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进 ...

  8. Java对象的序列化和反序列化实践

    2013-12-20 14:58 对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象.对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存 ...

  9. Java基础学习总结--Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换成字节序列的过程称之为对象的序列化 把字节序列恢复为对象的过程称之为对象的反序列化 对象序列化的主要用途: 1)把对象的字节序列永久的保存到硬盘上,通常放在一个文 ...

  10. 深入理解Java对象的序列化与反序列化的应用

    当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送:接收方则需要把字节序列再 ...

随机推荐

  1. sqlserver循环

    普通while循环 1 循环5来修改学生信息 循环遍历修改记录 DECLARE @i int set @i=0 while @i<5 BEGIN update Student set demo ...

  2. 在Vue中使用计时器笔记

    在Vue中使用了计时器,一定要记得在生命周期destroyed()里清掉,不然第二次进入这个组件,会出现很大的问题 destroyed () { // (很重要)当跳转到其他页面的时候,要在生命周期的 ...

  3. ie6 表格td中无内容时不显示边框的解决办法

    1.在单元格中加入一个空格.这样: <td> </td> 2.直接在table里这样写:<table border="0" cellspacing=& ...

  4. 温故而知新--JavaScript书摘(一)

    前言: 毕业到入职腾讯已经差不多一年的时光了,接触了很多项目,也积累了很多实践经验,在处理问题的方式方法上有很大的提升.随着时间的增加,愈加发现基础知识的重要性,很多开发过程中遇到的问题都是由最基础的 ...

  5. 【splunk】用正则表达式提取字段

    设input输入数据为 http://192.168.23.121/xxx  想提取出里面的ip,可以用rex source="xxx.csv" |rex field=input ...

  6. linux 终端上网设置

    原网址: https://www.aliyun.com/jiaocheng/215068.html 摘要:第一步,需要安装一个名为w3m的软件工具,打开终端,输入如下命令sudoapt-getinst ...

  7. Laravel Form 表单的数据校验

    例如,要使用手机号加验证码的方式提供登录网站的功能,那么在处理前端提交的 form 表单时,就不得不对提交的手机号及验证码做基本的数据校验. 手写规则,非常浪费时间.使用 laravel 内置的 va ...

  8. Linux系统上安装docker + Compose并创建WordPress

    安装docker可参考我的另一篇文章 安装Compose Docker Compose 是 Docker 官方编排(Orchestration)项目之一, 负责快速在集群中部署分布式应用. 方法一 1 ...

  9. python 全栈开发,Day131(向app推送消息,玩具端消息推送)

    先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.4.zip 注意:由于涉及到 ...

  10. Ubuntu 下安装LEMP环境 实战

    ---恢复内容开始--- 1.nginx的服务端的安装 打开命令行终端,在终端输入,sudo apt-get install nginx  回车即开始安装 kxlc-t@ubuntu:~$ sudo ...