Java序列化与反序列化(Serializable)
Java序列化与反序列化(Serializable)
特别注意:
1.要序列化的类必须实现Serializable借口
2.在反序列化(读取对象)的时候必须额外捕获EOFException
3.序列化之后的文件是“乱码”
package com.frank.io; import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* author:pengyan
* date:Jun 15, 2011
* file:ObjectInputOutputStreamTest.java
*/ public class ObjectInputOutputStreamTest {
String path="E:\\planda.p";
public static void main(String[] args) throws Exception {
ObjectInputOutputStreamTest test=new ObjectInputOutputStreamTest();
test.outputObject();
test.inputObject();
}
private void inputObject() throws Exception {
//create inputObjectStream
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(path));
// temp object to receive the value of this stream read everytime
Object obj=null;
PandaEntity p=null;
try {
while((obj=ois.readObject())!=null){
p=(PandaEntity)obj;
//show the object read by the stream
System.out.println(p.toString());
}
} catch (EOFException e) {
//throw EOFException when read end
System.err.println("读取完毕");
}
}
private void outputObject() throws Exception{
//create two object to output
PandaEntity p1=new PandaEntity(1000,"团团",3);
PandaEntity p2=new PandaEntity(2000,"圆圆",3);
//create the output stream
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(path));
//write object
oos.writeObject(p1);
oos.writeObject(p2);
//flush the stream
oos.flush();
//close the stream
oos.close();
}
}
class PandaEntity implements Serializable{
/*the class must implements Serializable interface
* or there will throw java.io.NotSerializableException
* */
private Integer id;
private String name;
private Integer age;
@Override
public String toString() {
return "id:"+id+"\tname:"+name+"\tage:"+age;
}
public PandaEntity() {
}
public PandaEntity(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
Java序列化与反序列化(Serializable)的更多相关文章
- Java 序列化和反序列化(三)Serializable 源码分析 - 2
目录 Java 序列化和反序列化(三)Serializable 源码分析 - 2 1. ObjectStreamField 1.1 数据结构 1.2 构造函数 2. ObjectStreamClass ...
- Java 序列化和反序列化(二)Serializable 源码分析 - 1
目录 Java 序列化和反序列化(二)Serializable 源码分析 - 1 1. Java 序列化接口 2. ObjectOutputStream 源码分析 2.1 ObjectOutputSt ...
- Java 序列化和反序列化(一)Serializable 使用场景
目录 Java 序列化和反序列化(一)Serializable 使用场景 1. 最简单的使用:Serializable 接口 2. 序列化 ID 的问题 3. 静态字段不会序列化 4. 屏蔽字段:tr ...
- Serializable详解(1):代码验证Java序列化与反序列化
说明:本文为Serializable详解(1),最后两段内容在翻译上出现歧义(暂时未翻译),将在后续的Serializable(2)文中补充. 介绍:本文根据JDK英文文档翻译而成,本译文并非完全按照 ...
- Java序列化与反序列化
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...
- [转] Java序列化与反序列化
原文地址:http://blog.csdn.net/wangloveall/article/details/7992448 Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java ...
- Java基础(五)-Java序列化与反序列化
.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...
- Java序列化与反序列化(实践)
Java序列化与反序列化(实践) 基本概念:序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 昨天在一本书上 ...
- java序列化与反序列化(转)
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...
随机推荐
- js代码的一些小技巧
1. 数组中通过赋值语句来改变值 var a = 1; var msg = ["value0","value1"]; for(var i = 0;i<10 ...
- CentOS 6.4 离线安装 Cloudera 5.7.1 CDH 5.7.1
因为项目开发需要要在本地组建一个Hadoop/Spark集群,除了Hadoop/Spark还要同时安装多个相关的组件,如果一个个组件安装配置,对于一个由多台服务器组成的集群来说,工作量是巨大的. 所以 ...
- apt-mirror is already running(已运行)错误解决方案
运行sudo apt-mirror却无法启动服务了.而是给出了一行错误提示信息: apt-mirror is already running, exiting at /us ...
- ScriptTransformer
ScriptTransformer可能由java支持的JavaScript语言或者其他脚本语言写成的转换器.只支持Java 6以上版本. 例1: <dataConfig> <scri ...
- IOS开发之--异常处理--使用try 和 catch 来捕获错误。
一个搞java的老板问我会不会try catch 我说不会 学这么久也没听周围朋友用这个 因为苹果控制台本来就可以打印异常 特此研究一下. 1.try catch: 是捕获异常代码段 特点:对 ...
- ios-uitableviewcell展开
#import <UIKit/UIKit.h> @interface ZSDHelpCell : UITableViewCell @property (weak, nonatomic) I ...
- ios菜鸟总结2
这个星期学起oc来可能是最纠结的.话不多说先补充一下上一个星期的快捷键吧.工程导航器:Command+1 显示/隐藏导航器面板:Command+0 .显示/隐藏实用工具面板:Command+Op ...
- 懒人福利:Xcode插件将JSON格式化输出为模型的属性->ESJsonFormat-Xcode
这是一个直接将json数据转换为模型数据的插件,只需要在控制台输入json数据,就可以在模型文件的.h文件中生成对应的模型数据 对于模型套模型的数据也做了处理,比较方便. 有需要的人可以尝试一下,但不 ...
- linux ----虚拟机无法与本地机通信
1.以前能正常通信,电脑重启或休眠唤醒后, 虚拟机centos无法与本地主机通信,但能ping通同一局域网的其他主机,也能与外网通信 故障原因: 未找到 解决办法: 1.重启电脑 2.重启xshell ...
- JAVA备忘录
本文主要是记录一下JAVA: 1.Arrays.的几个用法: fill:数组全部置一个数 sort:排序 binarySearch:二分查找 2.Map的用法: Map<Integer,Inte ...