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 对象序列化和反序列化的更多相关文章

  1. Java之对象序列化和反序列化

    一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...

  2. java 对象序列化与反序列化

    Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为 ...

  3. Java 序列化 对象序列化和反序列化

    Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...

  4. Java对象序列化和反序列化的工具方法

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  5. Java对象序列化与反序列化

    对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存 ...

  6. java中的序列化与反序列化,还包括将多个对象序列化到一个文件中

    package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java. ...

  7. Java对象序列化与反序列化一 JSON

    Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student {    private String nam ...

  8. 【Java基础】序列化与反序列化深入分析

    一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...

  9. 【Java】Java原生的序列化和反序列化

    写一个Java原生的序列化和反序列化的DEMO. 需序列化的类: package com.nicchagil.nativeserialize; import java.io.Serializable; ...

随机推荐

  1. 浅谈DDOS攻击

    preface 做过网站运维的同事来说,绝对遇到过DDOS的攻击吧,这样的攻击实属令人头疼,那么今年就说DDOS的攻击与防护吧. 原理 DDOS(Distributed Denial Of Servi ...

  2. 什么是QName

    看代码时经常碰到QName,当时对这个东东具体什么意思也是不太明白:今天在看SOAP消息的时候,想到这个东东,就去仔细看了下.QName其实就是Qualified Name的简称,在"Nam ...

  3. PHP实现观察者模式

    <?php //php设计模式观察者模式 /** 被观察者 */ class user implements SplSubject{ public $lognum; public $hobby; ...

  4. jQuery 根据城市时区,选择对应的即时时间

    我们的CRM系统中,下面是用jQuery 做了个时区小插件 如图: // 时区城市//$(function(){//所有城市和时间静态输出//var cityID = 170; //中国,北京//va ...

  5. 记录两张数据库表及Ibatis操作

    建表语句 CREATE TABLE `TS_MopayInvoiceComposition` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `RequestID` i ...

  6. iOS 生命周期

       应用生命周期 App启动:当App启动时,首先由not running状态切换到inactive状态,此时调用application:didFinishLaunchingWithOptions: ...

  7. asp.net mvc 4 高级编程学习笔记:第三章 视图(2)

    页面布局 asp.net MVC中提供了布局的支持,默认情况下才布局文件保存到 /View/Shared/目录下的_Layout.cshtml,View目录有个_ViewStart.cshtml文件, ...

  8. CentOS 与 RedHat 关系和区别

    转自http://www.aixchina.net/club/archiver/tid-26784.html CentOS 发行版介绍 CentOS 是 Community ENTerprise Op ...

  9. 关于360的META设置,强制使用极速模式

    我的网站,为了使360浏览器打开时默认为极速模式,给用户良好的体验!避免网页由于细节而导致页面布局错乱~ <!DOCTYPE HTML> <html> <head> ...

  10. POJ 2411 Mondriaan&#39;s Dream

    状压DP Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 9938 Accepted: 575 ...