`

object 的序列化和反序列化

 
阅读更多
首先定义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#...

    C++ JSON 序列化与反序列化

    1. 复杂类型的处理:除了基本类型外,还可以序列化和反序列化自定义类、结构体以及容器(如vector、map等)。对于自定义类型,通常需要重载`operator和`operator>>`,或者使用nlohmann/json库中的`to_json`和`from_...

    ASPNET中JSON的序列化和反序列化的方法

    在***中处理JSON的序列化和反序列化是Web开发中常见的需求。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,由于其简洁性和易于阅读性,被广泛用于服务器与客户端之间的数据传输。下面将详细介绍**...

    jackson json序列化,反序列化所需jar包

    Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的JSON序列化和反序列化功能。在Java应用程序中,我们经常需要将Java对象转换为JSON字符串(序列化)或从JSON字符串恢复Java对象(反序列化),Jackson库就是...

    java序列化和反序列化

    - 实现此接口后,Java虚拟机就能够自动进行序列化和反序列化操作。 2. **序列化过程:** - 创建一个`java.io.ObjectOutputStream`实例。 - 使用`ObjectOutputStream`的`writeObject()`方法将对象写出到输出流中...

    C#通过Socket发送Object对象,序列化,反序列化

    这是一个用C#写的Socket服务器和客户端,当然Socket服务器和客户端不是主要的(有兴趣的朋友可以参考下),主要的内容是介绍如何通过这种Socket方式发送Object对象。 作者博客 http://luyugao.com

    C# 各种序列化和反序列化

    在编程世界中,序列化和反序列化是两个至关重要的概念,尤其是在C#这样的面向对象的语言中。它们允许我们将对象的状态转换为数据流,以便存储或传输,然后将这些数据流还原为原来的对象形式。本篇文章将深入探讨C#中...

    json数据序列化和反序列化

    在IT领域,JSON数据序列化和反序列化是数据处理的重要环节,尤其在Web开发中,它们在客户端与服务器之间传递数据时起到关键作用。 1. JSON数据格式:JSON数据由键值对组成,键用引号包围,然后冒号分隔,接着是值。...

    VB.NET XML和JSON序列化与反序列化

    在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...

    kryo实例,对java object的序列化和反序列化

    kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...

    序列化与反序列化

    在计算机科学领域,序列化和反序列化是两个至关重要的概念,特别是在数据传输、存储以及对象持久化等场景。这两个过程对于理解数据流如何在内存、磁盘和网络之间转换至关重要。 序列化是指将对象的状态转化为可存储...

    .net 序列化和反序列化 Json

    .NET框架中的序列化和反序列化是数据转换的重要部分,特别是在与JSON格式交互时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,被广泛应用于...

    C#序列化和反序列化案例.rar

    在C#编程中,序列化和反序列化是两个关键的概念,它们对于数据持久化、网络传输以及跨进程通信等场景至关重要。在这个“C#序列化和反序列化案例”中,我们可以通过提供的代码示例深入理解这两个概念。 首先,序列化...

    C#源码 object与json数据序列化与反序列化

    利用.Net FrameWork3.5提供的Json库实现C#与Json数据转换时,对于Datetime类型的数据,生成格式如下数据 /Date(10000000000-0700)/ 不直观,同时相当部分js库无法直接使用.利用正则表达式替换成"yyyy-MM-dd HH:mm:ss...

    C#序列化与反序列化(包括复杂xml对象)

    在C#编程中,序列化和反序列化是两个关键的概念,它们主要用于对象状态的持久化和恢复。本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将...

    java serializable 序列化与反序列化

    - **readObject() 和 writeObject()** 方法:可以覆盖这两个方法来自定义序列化和反序列化的行为。 总结,Java的序列化与反序列化是强大的工具,能够帮助我们处理对象的持久化和网络传输。理解并熟练掌握这一技术,...

    delphi序列化与反序列化

    Delphi社区提供了一些第三方库,如SuperObject(用于JSON序列化)和Indy(支持多种协议的网络通信,包括序列化)。这些库提供了更高级的序列化功能,可以处理复杂的数据结构和自定义类型,同时支持多种数据格式。 ...

    Json序列化和反序列化

    Json序列化和反序列化是数据交换的一种常见方式,尤其在Web开发中广泛使用。它允许我们将对象转换为JSON(JavaScript Object Notation)格式的字符串,以便在网络上传输,然后在接收端将这些字符串还原为原来的对象...

    自己写的一个序列化和反序列化的例子

    在编程领域,序列化和反序列化是两个关键的概念,主要用在数据持久化、网络传输和对象状态的保存与恢复等场景。本示例旨在教你如何在Java中实现自定义的序列化和反序列化过程。让我们深入探讨这两个概念。 **序列化...

    java序列化(Serializable)的作用和反序列化.doc

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...

Global site tag (gtag.js) - Google Analytics