首先定义pojo. 这里必须要实现implements java.io.Serializable了,否则报
java.io.InvalidClassException: SexyWoman; class invalid for deserialization
public class SexyWoman implements java.io.Serializable{
private String name;
private long high;
private long weight;
public static String face="pretty";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getHigh() {
return high;
}
public void setHigh(long high) {
this.high = high;
}
public long getWeight() {
return weight;
}
public void setWeight(long weight) {
this.weight = weight;
}
}
然后我们定义
public static void doPojo2File() throws FileNotFoundException, IOException{
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("obj.txt"));
SexyWoman sw1=new SexyWoman();
sw1.setName("maggie");
sw1.setHigh(172);
sw1.setWeight(65);
sw1.face="ddd";
out.writeObject("你坏");
out.writeObject(new Date());
out.writeObject(sw1);
// out.writeInt(25);
out.close();
}
public static void doFile2Pojo() throws FileNotFoundException, IOException, ClassNotFoundException{
ObjectInputStream in=new ObjectInputStream(new FileInputStream("obj.txt"));
while(true){
Object by=(Object)in.readObject();
if(by==null){
break;
}
System.out.println(by);
if(by instanceof SexyWoman){
SexyWoman sw1=(SexyWoman)by;
System.out.println(sw1.getName());
System.out.println(sw1.face);
}
}
in.close();
}
最后去测试他们,
先把对象写进文件中,
public static void main(String[] args) {
try {
doPojo2File();
} catch (Exception e) {
if(e instanceof EOFException){
System.out.println("end");
}else{
e.printStackTrace();
}
}
}
然后把对象读出来,
public static void main(String[] args) {
try {
doFile2Pojo();
} catch (Exception e) {
if(e instanceof EOFException){
System.out.println("end");
}else{
e.printStackTrace();
}
}
}
读出,我们发现static属性face没有被改变。
引用
你坏
Sat Jun 15 19:33:55 GMT+08:00 2013
SexyWoman@1c43882a
maggie
pretty
end
要注意的是,jdk版本不同,序列化出来的如果是1.5,那么很可能1.4就不能反序列化,所以
我们可以强行定义 serialxxxxxID 在类pojo里面。
否者1.4和1.5的这个ID自动产生式不同的
如果我们加辆车,
public class Car implements java.io.Serializable{
private String cardName;
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
}
public class SerializeTest {
public static void main(String[] args) {
try {
doPojo2File();
doFile2Pojo();
} catch (Exception e) {
if(e instanceof EOFException){
System.out.println("end");
}else{
e.printStackTrace();
}
}
}
public static void doPojo2File() throws FileNotFoundException, IOException{
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("obj.txt"));
SexyWoman sw1=new SexyWoman();
sw1.setName("maggie");
sw1.setHigh(172);
sw1.setWeight(65);
Car car1=new Car();
car1.setCardName("ppo");
sw1.setCar(car1);
sw1.face="ddd";
out.writeObject("你坏");
out.writeObject(new Date());
out.writeObject(sw1);
// out.writeInt(25);
out.close();
}
public static void doFile2Pojo() throws FileNotFoundException, IOException, ClassNotFoundException{
ObjectInputStream in=new ObjectInputStream(new FileInputStream("obj.txt"));
while(true){
Object by=(Object)in.readObject();
if(by==null){
break;
}
System.out.println(by);
if(by instanceof SexyWoman){
SexyWoman sw1=(SexyWoman)by;
System.out.println(sw1.getName());
System.out.println(sw1.face);
System.out.println(sw1.getCar().getCardName());
}
}
in.close();
}
}
输出
引用
你坏
Sat Jun 15 21:31:26 GMT+08:00 2013
SexyWoman@6f967348
maggie
pretty
ppo
end
分享到:
相关推荐
在编程领域,序列化和反序列化是两个关键的概念,特别是在数据存储、网络传输和对象持久化等场景中。它们允许我们将对象的状态转换为字节流(序列化),然后在需要的时候将字节流还原为原来的对象(反序列化)。在C#...
1. 复杂类型的处理:除了基本类型外,还可以序列化和反序列化自定义类、结构体以及容器(如vector、map等)。对于自定义类型,通常需要重载`operator和`operator>>`,或者使用nlohmann/json库中的`to_json`和`from_...
在***中处理JSON的序列化和反序列化是Web开发中常见的需求。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,由于其简洁性和易于阅读性,被广泛用于服务器与客户端之间的数据传输。下面将详细介绍**...
Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的JSON序列化和反序列化功能。在Java应用程序中,我们经常需要将Java对象转换为JSON字符串(序列化)或从JSON字符串恢复Java对象(反序列化),Jackson库就是...
- 实现此接口后,Java虚拟机就能够自动进行序列化和反序列化操作。 2. **序列化过程:** - 创建一个`java.io.ObjectOutputStream`实例。 - 使用`ObjectOutputStream`的`writeObject()`方法将对象写出到输出流中...
这是一个用C#写的Socket服务器和客户端,当然Socket服务器和客户端不是主要的(有兴趣的朋友可以参考下),主要的内容是介绍如何通过这种Socket方式发送Object对象。 作者博客 http://luyugao.com
在编程世界中,序列化和反序列化是两个至关重要的概念,尤其是在C#这样的面向对象的语言中。它们允许我们将对象的状态转换为数据流,以便存储或传输,然后将这些数据流还原为原来的对象形式。本篇文章将深入探讨C#中...
在IT领域,JSON数据序列化和反序列化是数据处理的重要环节,尤其在Web开发中,它们在客户端与服务器之间传递数据时起到关键作用。 1. JSON数据格式:JSON数据由键值对组成,键用引号包围,然后冒号分隔,接着是值。...
在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...
kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...
在计算机科学领域,序列化和反序列化是两个至关重要的概念,特别是在数据传输、存储以及对象持久化等场景。这两个过程对于理解数据流如何在内存、磁盘和网络之间转换至关重要。 序列化是指将对象的状态转化为可存储...
.NET框架中的序列化和反序列化是数据转换的重要部分,特别是在与JSON格式交互时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,被广泛应用于...
在C#编程中,序列化和反序列化是两个关键的概念,它们对于数据持久化、网络传输以及跨进程通信等场景至关重要。在这个“C#序列化和反序列化案例”中,我们可以通过提供的代码示例深入理解这两个概念。 首先,序列化...
利用.Net FrameWork3.5提供的Json库实现C#与Json数据转换时,对于Datetime类型的数据,生成格式如下数据 /Date(10000000000-0700)/ 不直观,同时相当部分js库无法直接使用.利用正则表达式替换成"yyyy-MM-dd HH:mm:ss...
在C#编程中,序列化和反序列化是两个关键的概念,它们主要用于对象状态的持久化和恢复。本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将...
- **readObject() 和 writeObject()** 方法:可以覆盖这两个方法来自定义序列化和反序列化的行为。 总结,Java的序列化与反序列化是强大的工具,能够帮助我们处理对象的持久化和网络传输。理解并熟练掌握这一技术,...
Delphi社区提供了一些第三方库,如SuperObject(用于JSON序列化)和Indy(支持多种协议的网络通信,包括序列化)。这些库提供了更高级的序列化功能,可以处理复杂的数据结构和自定义类型,同时支持多种数据格式。 ...
Json序列化和反序列化是数据交换的一种常见方式,尤其在Web开发中广泛使用。它允许我们将对象转换为JSON(JavaScript Object Notation)格式的字符串,以便在网络上传输,然后在接收端将这些字符串还原为原来的对象...
在编程领域,序列化和反序列化是两个关键的概念,主要用在数据持久化、网络传输和对象状态的保存与恢复等场景。本示例旨在教你如何在Java中实现自定义的序列化和反序列化过程。让我们深入探讨这两个概念。 **序列化...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...