`
shenshuibomb
  • 浏览: 24528 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA串行化(序列化)

阅读更多
JAVA串行化(序列化)
假设你想保存一个或多个对象的状态。如果Java不具备串行化能力,就不得不使用某个I/O类写出你想保存的所有对象的实例变量的状态。
串行化简单地说就是“保存这个对象及其所有实例变量Transient,这意味,不会把瞬态变量的值作为对象的串行化状态的一部分包括进来。”。实际上,更有趣的是,显式地将一个变量标识为
将要实现序列化的类必须实现Serializable接口或者是Externalizable接口。
在Serializable接口中没有定义任何方法,而在Externalizable接口中需要实现
public void writeExternal(ObjectOutput out) throws IOException{}以及
public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException{}抽象方法。
一.实现Serializable接口的序列化
/**
*功能:个人信息类
* @author zhangqi
*/
package demo;
import java.io.Serializable;
public class Person implements Serializable
{
privateString name;
privatechar sex;
privateint age;
public Person(String name,char sex,int age)
{
this.name=name;
this.sex=sex;
this.age=age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public char getSex()
{
return sex;
}
public void setSex(char sex)
{
this.sex = sex;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String toString()
{
return getName()+", "+getSex()+", "+getAge();
}
}
/**
*功能:实现对象序列化
* @author Administrator
*/
package demo;
import java.io.*;
public class SerializeTest {
public static void writeO(Person p)
{
try
{
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("test.txt"));
oos.writeObject(p);
oos.close();
System.out.println("写入完成!!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void readO()
{
Person p=null;
try
{
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("test.txt"));
p=(Person)ois.readObject();
System.out.println("读出输出");
System.out.println(p);
ois.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Personp1 = new Person("张琦",'男',22);
writeO(p1);
readO();
}
}
当然对于一些敏感数据,不应该将它序列化输出,我们可以在属性前面加上关键字transient,可以让相应的属性不被序列化。
二.实现Externalizable接口实现序列化
在这个类中实现Externalizable接口的两个用于读写属性的方法readExternal()和writeExternal()。通过实现这两个方法,就可以自定义对象的序列化机制。
当从保存了序列化的对象的媒质中读出对象的时候,它会调用类的不带任何参数的默认构造器来构造对象,因此,如果在这个实现Externallizable接口的类中定义类构造器,那么还需要定义一个不带参数的构造器。
/**
* ExternExample.java
*/
package demo;
import java.io.*;
/**
* @author zhangqi
*/
public class ExternExample implements Externalizable{
private String name;
private String creditcard;
private int age;
private double salary;
public ExternExample() {
System.out.println("没有参数的构造器被使用!");
}
public ExternExample(String name,String creditcard,int age,double salary)
{
this.name=name;
this.creditcard=creditcard;
this.age=age;
this.salary=salary;
}
public void writeExternal(ObjectOutput out) throws IOException
{
System.out.println("写入对象...");//本处未对creditcard属性进行序列化。
out.writeObject(name);
out.writeInt(age);
out.writeDouble(salary);
}
public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException
{
System.out.println("读出对象...");
name=(String)in.readObject();
age=in.readInt();
salary=in.readDouble();
}
public String toString()
{
return name+" ,"+age+" ,"+salary;
}
}
/*
* SerializeTest.java
*
*/
package demo;
import java.io.*;
/**
*
* @author zhangqi
*/
public class SerializeTest {
public static void writeO(ExternExample p)
{
try
{
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("test.txt"));
oos.writeObject(p);
oos.close();
System.out.println("写入完成!!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void readO()
{
ExternExample p=null;
try
{
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("test.txt"));
p=(ExternExample)ois.readObject();
System.out.println("读出输出");
System.out.println(p);
ois.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
ExternExample e1 = new ExternExample("张琦","110107",22,10000);
writeO(e1);
readO();
}
}
分享到:
评论

相关推荐

    Java 串行化(序列化)Serializable/Externalizable

    NULL 博文链接:https://zhycaf.iteye.com/blog/982092

    对象序列化 串行化

    对象序列化 串行化 实现java对象的保存

    串行化和反串行化

    串行化/序列化:将java对象转换成某种格式(JVM定义的)的字节数组 串行化使用场景: 将对象用户网络间传输或者是本地化储存。 反串行化:将字节数组恢复成java对象。 package com.yongjun.io; import java.io....

    JAVA笔记??序列化

    所谓的对象序列化(在很多地方也被成为串行化),是指将对象转换成二进制数据流的一种实现手段。通过将对象序列化,可以方便地实现对象的传输及保存。  在Java中提供有ObjectInputStream与ObjectOutputStream这两...

    Google.ProtocolBuffers.2.4.1.555

    Google Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的...

    即时聊天(序列化)

    采用序列化串行接口方式首发 有服务端,客户端。 运行先启动服务端,并给一个空闲端口 例如6789 之后开启客户端(可多个测试) 客户端输入服务端的ip 端口 和你的昵称即可

    Java初级、中级、高级面试题及答案

    事务\事务隔离级别\Mysql默认隔离级别\串行化\存储引擎Innodb\Myisam\Inodb锁机制\MVCC\B树索引\哈希索引\聚簇索引\非聚簇索引\回表查询和覆盖索引\Explain语句\SQL语句的执行过程\范式\聚合函数\SQL优化\HTTP\多态\...

    protobuf-java-3.5.1

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化...

    深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题

    Netty的高并发高性能架构设计精髓包括:主从Reactor线程模型,NIO多路复用非阻塞,无锁串行化设计思想,支持高性能序列化协议,零拷贝(直接内存的使用),ByteBuf内存池设计,灵活的TCP参数配置能力,以及并发优化...

    Java思维导图xmind文件+导出图片

    理解通信协议传输过程中的序列化和反序列化机制 基于框架的RPC通信技术 WebService/ApacheCXF RMI/Spring RMI Hession 传统RPC技术在大型分布式架构下面临的问题 分布式架构下的RPC解决方案 Zookeeper ...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 流 字符流 字节流 语言特性 继承 封装 多态 JVM 多线程与并发 GC...

    protoc使用说明

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化...

    protobuf-3.4.0.zip

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化...

    失物招领平台源码java-da-streamingledger:流数据上的可序列化ACID事务

    流数据上的可序列化 ACID 事务 data Artisans Streaming Ledger 是一个基于 的库,用于使用可序列化的 ACID 语义处理跨多个共享状态/表的事件流。 数据 Artisans Streaming Ledger 允许您定义一组状态,连接驱动事务...

    JSON-RPC-Java:Random.org JSON-RPC API(修订版1)Java实现

    它通过RandomOrgClient类提供对API的已签名和未签名方法的序列化或非序列化访问。 它还通过RandomOrgClient类提供了一个便利类,即RandomOrgCache,用于预先缓存请求。 在此模块的上下文中,串行化客户端是为其请求...

    Google Protobuffer C#

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化...

    Java数据编程指南

    数据定义 基本数据操作 数据完整性 表达式 连接 合并 子查询 小结 附录B 序列化 简介 序列化 可串行化的接口 小结 附录C Java和分布式应用程序 分布式系统 分布式...

    整理后java开发全套达内学习笔记(含练习)

    序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit] stack n.堆栈 [stæk] (对应 heap 堆) statement 程序语句; 语句 ['steitmәnt]' n. 陈述,...

    PHP安装protobuf详解

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化...

    Protobuf协议快速入门指南(一个小时入门protobuf)

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化...

Global site tag (gtag.js) - Google Analytics