Java Io 对象序列化和反序列化
Java 支持将任何对象进行序列化操作,序列化后的对象文件便可通过流进行网络传输。
1. 对象序列化就是将对象转换成字节序列,反之叫对象的反序列化
2. 序列化流ObjectOutputStream
3. 反序列化流 OjbectInputStream
4. 序列化的对象必须实现一个接口 Serializable
5. 如果在对象中不想序列化某个字段,那么可以在该字段中添加transient关键字
6. 对子类进行序列化操作时,父类的构造函数会被递归调用
7. 对子类进行反序列操作时,如果父类没有实现序列化接口那么父类的构造函数会被调用
写一个将Users对象序列化和反序列化的事例:
package com.dcz.io; 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 java.io.OutputStream; public class ObjectSerializableDemo { public static void main(String[] args) throws Exception { // 序列化对象
File writeObjectFile = new File("d:\\users.dat");
if(!writeObjectFile.exists()){
writeObjectFile.createNewFile();
}
OutputStream fileOutputStream = new FileOutputStream(writeObjectFile);
ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream); Users user = new Users("admin","123456","管理员用户");
oos.writeObject(user);
oos.flush();
oos.close(); // 反序列化对象
File readerObjectFile = new File("d:\\users.dat");
InputStream fileInputStream = new FileInputStream(readerObjectFile);
ObjectInputStream ois = new ObjectInputStream(fileInputStream);
Users user2 = (Users)ois.readObject();
System.out.println(user2); } }
package com.dcz.io;
import java.io.Serializable;
public class Users implements Serializable{
private static final long serialVersionUID = 4345979997811128454L;
private String username;
private String password;
private String describe;
public Users(){}
public Users(String username, String password, String describe) {
super();
this.username = username;
this.password = password;
this.describe = describe;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
@Override
public String toString() {
return "Users [username=" + username + ", password=" + password
+ ", describe=" + describe + "]";
}
}
如果不想默认序列化,想自定义序列化操作和反序列化操作就添加方法
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException{
// 在这里做处理序列化
}
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
// 在这里做处理反序列化
}
Java Io 对象序列化和反序列化的更多相关文章
- Java之对象序列化和反序列化
一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- Java 序列化 对象序列化和反序列化
Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...
- Java对象序列化和反序列化的工具方法
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Java对象序列化与反序列化
对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存 ...
- java中的序列化与反序列化,还包括将多个对象序列化到一个文件中
package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java. ...
- Java对象序列化与反序列化一 JSON
Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student { private String nam ...
- 【Java基础】序列化与反序列化深入分析
一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...
- 【Java】Java原生的序列化和反序列化
写一个Java原生的序列化和反序列化的DEMO. 需序列化的类: package com.nicchagil.nativeserialize; import java.io.Serializable; ...
随机推荐
- Low Power Consumption Design --- MCU Attention
20161008 note : I have a PCB board called 'A' where a piece of STM8L052C6 and a piece of CC1101 are ...
- mybatis的逆向工程
mybatis的逆向工程是很大的减少了程序员对代码的编写工作,由于mybatis是半自动的sql语句使用,我们在项目中一般都是采用逆向工程来生成mybatis的文件,mapper接口相当于我们平常所说 ...
- 转:在VS2010下编译、调试和生成mex文件
最近帮人调了一个程序,是网上公开的代码,利用matlab与c++混合编程做三维模型关键点检测,发现他们可以用VS2010编译.调试.生成mexw32文件,因此觉得之前在Matlab上利用mex命令真是 ...
- jquery 获取json文件数据,显示到jsp页面上, 或者html页面上
[{"name":"中国工商银行","code":102},{"name":"中国农业银行",&qu ...
- WinForm------GridControl右键添加动态菜单
转载:http://www.devexpresscn.com/Resources/Documentation-440.html 更加好用的方法: 1.添加一个GridControl控件,PopupMe ...
- CentOS 6.x安装Metasploit
现在开始安装Metasploit框架,前面的包安装成功之后,我们需要再安装一些Metasploit依赖的Ruby库,命令如下: gem install wirble pg sqlite3 msgpac ...
- 9月14日JavaScript循环语句作业解析
1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 解法一: var gd = 8848; var cs = 0; while(true) { cs++; gd = gd ...
- HTML5学习预览
HTML5中,新增了很多input元素的类型 email email类型用于应该包含 e-mail 地址的输入域. url url 类型用于应该包含 URL 地址的输入 ...
- codeforces 711B - Chris and Magic Square(矩阵0位置填数)
题目链接:http://codeforces.com/problemset/problem/711/B 题目大意: 输入 n ,输入 n*n 的矩阵,有一个占位 0 , 求得将 0 位置换成其他的整数 ...
- IIS 8.5 伪静态去掉index.php thinkphp 3.2.2
因为测试都是在win下开发的 win8.1企业版 II8.5 首先安装 Thinkphp 3.2.2 URL Rewrite Module 2.0 http://www.iis.net/downlo ...