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; ...
随机推荐
- vmware tools 在linux中的作用
VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能 是VMware提供的增强虚拟显卡和硬盘性能 以及同步虚拟机与主机时钟的驱动程序. 只有在VMw ...
- 阿里巴巴集团2016校园招聘-Python工程师笔试题(附加题+部分答案)
前言 第一次网上笔试,被虐的很惨.一是不太习惯,最主要的是还是自己对Python的掌握,还不够熟练.下面是这次阿里笔试相关信息 笔试时间是,2015年8月23日,10:00——12:00 对于笔试题, ...
- python学习笔记-(二)python入门
1.第一个python程序 1.1 直接打印输出 打开cmd,输入python进入到python交互式环境:(看到>>>是在Python交互式环境下:) 在python交互环境下输入 ...
- 在JavaScript中,arguments是对象的一个特殊属性。
arguments对象 function函数的内置参数的"数组"/"集合":同时arguments对象就像数组,但是它却不是数组. 常用属性: 1.length ...
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
http://hi.baidu.com/%B1%D5%C4%BF%B3%C9%B7%F0/blog/item/e7284ef16bcec3c70a46e05e.html select函数用于在非阻塞中 ...
- SDK
IOS: iOS Application Life Cycle 应用程序生命周期 http://www.cnblogs.com/chenyg32/p/3873301.html iOS应用程序生命周期( ...
- 创建为ClickOnce清单签名的.pfx格式数字证书
------ 第一步 创建 X.509 证书 ------makecert.exe为证书创建工具.证书创建工具生成仅用于测试目的的 X.509 证书.它创建用于数字签名的公钥和私钥对,并将其存储在证书 ...
- Mixing ASP.NET and MVC routing
Here is the solution I settled on. I installed the NuGet Microsoft.AspNet.FriendlyUrls package. Then ...
- 使用Robomongo 连接MongoDB 3.x 报 Authorization failed 解决办法(转)
最近安装了mongodb3.1.4,并启用了权限验证,在dos窗口下操作没有任何问题,为了维护方便就下载了一个客户端工具Robomongo 0.8.5,用户名.密码的等配置好点解测试,结果连接服务没有 ...
- php-fpm进程关闭与重启脚本详解(转)
先来理解一下什么是php-fpm PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的. PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中.必须将 ...