• 先创建一个实现了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. spring事物的传播行为及隔离

    关于@Transactional注解: 添加事务注解1.使用 propagation 指定事务的传播行为, 即当前的事务方法被另外一个事务方法调用时如何使用事务, 默认取值为 REQUIRED, 即使 ...

  2. cf1020c 瞎搞

    枚举获胜状态即可 #include<iostream> #include<cstdio> #include<cstring> #include<cmath&g ...

  3. icomet研究

    官方文档https://github.com/ideawu/icomet/wiki 如何实现的长连接:noop: 心跳消息+HTTP endless chunk 以班级ID为主键,进行班级通道的创建: ...

  4. requirejs模块路径配置问题

    三种情况:一.设置data-main,没配置baseUrl,以data-main的文件为基准:二.设置data-main,配置baseUrl,baseUrl以值以引用require.js的HTML为基 ...

  5. Mac上c语言连接mysql遇到的问题

    参照<Beginning Linux Programming>上的例程写了一个连接mysql的c语言小程序connect1.c.但是按照书上的编译命令无法编译.然后经过查阅资料解决了问题. ...

  6. Codeforces Round #441(Div.2) F - High Cry

    F - High Cry 题目大意:给你n个数,让你找区间里面所有数或 起来大于区间里面最大数的区间个数. 思路:反向思维,找出不符合的区间然后用总数减去.我们找出每个数掌控的最左端 和最右端,一个数 ...

  7. OpenCV中cv2的用法

    一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志  cv2.IMREAD_COLOR:默认参数 ...

  8. HDU - 1392 凸包求周长(模板题)【Andrew】

    <题目链接> 题目大意: 给出一些点,让你求出将这些点全部围住需要的多长的绳子. Andrew算法 #include<iostream> #include<cstdio& ...

  9. web扫描工具-Nikto介绍与使用

    Nikto Perl语言开发的开源Web安全扫描器 web扫描模式:截断代理主动扫描 可以扫描的方面:软件版本搜索存在安全隐患的文件服务器配置漏洞WEB Application层面的安全隐患避免404 ...

  10. 不一样的go语言-一样的语法

    前言   上一篇入门篇算是初识庐山真面目,我们知道了一个go程序的构成,在这里总结一下. //包名 package //导入包 import "fmt" //main方法,程序入口 ...