博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java序列化与反序列化
阅读量:5102 次
发布时间:2019-06-13

本文共 2435 字,大约阅读时间需要 8 分钟。

 

        public interface Serializable类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。

 

        序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。

  
        序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例
  
        序列化有什么特点:
  
        如果某个类能够被序列化,其子类也可以被序列化。

 

        声明为static和transient类型的成员数据不能被序列化。

    
        static是类共享的,当该类一个对象被序列化后,这个static变量可能会被另一个对象改变,所以这决定了静态变量是不能序列化的,但如果是final,就可以,因为这是一个常量。

 

        如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

 

        什么时候使用序列化:

 

        对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。

 

        java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。

 

import java.io.Serializable;/** *  * @author InJavaWeTrust * */public class Person implements Serializable{	private static final long serialVersionUID = -399858645849256406L;		private String name;	private String sex;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getSex() {		return sex;	}	public void setSex(String sex) {		this.sex = sex;	}	}

 

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OutputStream;/** * 序列化与反序列化 * @author InJavaWeTrust * */public class TestPerson {		public static void main(String[] args) {		Person person = new Person();		person.setName("java");		person.setSex("F");		File file = new File("d:\\person.txt");		try {			file.createNewFile();		} catch (IOException e) {			e.printStackTrace();		}		try {			//序列化			OutputStream os = new FileOutputStream(file);			ObjectOutputStream oos = new ObjectOutputStream(os);			oos.writeObject(person);			oos.flush();			oos.close();			os.close();			//反序列化			InputStream is = new FileInputStream(file);			ObjectInputStream ois = new ObjectInputStream(is);			Person per = (Person) ois.readObject();			System.out.println("name[" + per.getName() + "]");			System.out.println("sex[" + per.getSex() + "]");			ois.close();			is.close();		} catch (FileNotFoundException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		} catch (ClassNotFoundException e) {			e.printStackTrace();		}	}}
 

转载于:https://www.cnblogs.com/muyuge/p/6152026.html

你可能感兴趣的文章
移动开发平台-应用之星app制作教程
查看>>
使用VIsio绘制E-R图
查看>>
Linux文件类型 扩展名的作用
查看>>
MySQL常用命令基础操作
查看>>
五种进程调度的算法实现(二)
查看>>
MySQL数据库的登陆
查看>>
linux解压缩6层
查看>>
fork详解
查看>>
原型模式(Prototype)C++实现
查看>>
【poj2373】Dividing the Path【单调队列优化dp】
查看>>
宕机重启服务监测
查看>>
分析wordpress搭建的网站百度收录不好的原因
查看>>
如何实现带照片缩略图的Listview
查看>>
bzoj4008: [HNOI2015]亚瑟王
查看>>
[ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵
查看>>
hdu2647(拓扑排序)
查看>>
django中admin路由系统工作原理
查看>>
Java多线程编程核心技术
查看>>
SQL GRANT
查看>>
2018/12/06 L1-022 L1-022 奇偶分家 Java
查看>>