`

[java][io][Serialize]对象序列化,Externalizable

阅读更多

import java.io.EOFException;
import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;

/**
 * 
 * Externalizable接口继承于Serializable,并有writeExternal()和readExternal()方法.
 * 这两个方法在序列化和反序列化时被调用.
 * Externalizable接口的子类在反序列化时需要调用默认构造,因此其子类构造的权限必须为public.
 * 
 */
public class ExternalizeDemo {

	public static void main(String[] args)  {
		Ext1 e1 = new Ext1();
		Ext2 e2 = new Ext2(5);
		String filePath = "d:\\e.txt";
		try{
			serialize(filePath, e1, e2);
			deserialize(filePath);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	//序列化
	static void serialize(Object obj, String filePath) throws Exception{
		FileOutputStream file = new FileOutputStream(filePath);
		ObjectOutputStream out = new ObjectOutputStream(file);
		out.writeObject(obj);
		out.close();
		System.out.println("serialize end.");
	}
	
	//序列化
	static void serialize(String filePath, Object... objs ) throws Exception{
		FileOutputStream file = new FileOutputStream(filePath);
		ObjectOutputStream out = new ObjectOutputStream(file);
		for(Object obj : objs){
			out.writeObject(obj);
		}
		out.close();
		System.out.println("serialize end.");
	}
	
	//反序列化
	static void deserialize(String filePath) throws Exception{
		FileInputStream file = new FileInputStream(filePath);
		ObjectInputStream in = new ObjectInputStream(file);
		Object obj = null;
		try {
			while((obj=in.readObject()) != null){
				System.out.println(obj.toString());
			}
		} catch (EOFException e) {
			//
		}
		
		in.close();
	}

	static class Ext1 implements Externalizable {

		//public构造
		public Ext1() {
			System.out.println("Ext1...");
		}

		public void writeExternal(ObjectOutput out) throws IOException {
			System.out.println("writeExternal...");
		}

		public void readExternal(ObjectInput in) throws IOException,
				ClassNotFoundException {
			System.out.println("readExternal...");
		}

	}

	static class Ext2 implements Externalizable {

		private int i;
		
		public Ext2() {
			System.out.println("Ext2...");
		}
		
		public Ext2(int i){
			System.out.println("Ext2(int i)...");
			this.i = i;
		}

		public void writeExternal(ObjectOutput out) throws IOException {
			System.out.println("writeExternal2...");
			out.writeInt(i);//如果不这样做,反序列化后得到的是0,而不是序列化时的值
		}

		public void readExternal(ObjectInput in) throws IOException,
				ClassNotFoundException {
			System.out.println("readExternal2...");
			i = in.readInt();//如果不这样做,反序列化后得到的是0,而不是序列化时的值
		}
		
		public String toString(){
			return Integer.toString(i);
		}

	}

}

/*
Ext1...
Ext2(int i)...
writeExternal...
writeExternal2...
serialize end.
Ext1...
readExternal...
com.mycom.serial.ExternalizeDemo$Ext1@173a10f
Ext2...
readExternal2...
5


*/

分享到:
评论

相关推荐

    java序列化对象传给php

    android(包括java)序列化一个对象传给php去做处理,或是接到php...//将一个对象序列化后返回byte[] String phpserialstr=new String(b); 将变量phpserialstr传给php即可. PHPSerializer中还有unserialize方法,是反序列化

    TIA博途-序列化指令Serialize的具体使用方法示例.docx

    在TIA博途中,序列化指令`Serialize`是一个非常重要的功能,它允许我们将复杂的自定义数据类型(如UDT, STRUCT等)转换为基本数据类型,通常是BYTE或CHAR类型的数组。这在数据交换、存储和通信过程中特别有用,因为...

    C#对象序列化与反序列化

    ### C#对象序列化与反序列化 #### 1. 对象序列化的介绍 ##### (1).NET支持对象序列化的几种方式 .NET框架提供了多种序列化机制,它们各自有不同的应用场景和特点。 - **二进制序列化**: - **定义**:二进制...

    C#对象序列化反序列化保存与读取和对象直接保存与读取

    此外,它们还提供了版本兼容性,允许在不同版本的代码之间序列化和反序列化对象。 在Windows Forms应用程序中,对象的序列化和反序列化常用于保存用户配置、游戏进度等信息。例如,你可以创建一个窗体的设置类,...

    java 序列化成PHP格式。

    将java数据 序列化成PHP的格式 a:4:{s:6:"title2";s:13:"这是标题2";s:6:"title3";s:13:"这是标题3";s:5:"title";s:13:"这是标题1";s:6:"title4";s:13:"这是标题4";} 或者a:1:{i:0;a:1:{s:4:"name";s:10:"这是1321";...

    C#对象序列化 源代码

    在.NET框架中,C#对象序列化是一种将对象的状态转换为可存储或可传输的数据格式的过程。这在很多场景下非常有用,例如保存用户会话、传输数据到远程服务器或者持久化对象到数据库。对象序列化的概念是核心的编程概念...

    se_mouz_image.rar_serialize_序列化

    在IT领域,序列化是一个非常重要的概念,尤其是在数据存储、网络传输和对象持久化等方面。在PHP中,`serialize()`函数就是用来将变量转化为字符串,这样就可以方便地存储或者通过网络发送。在这个“se_mouz_image....

    深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)

    transient关键字用于修饰序列化对象的成员变量,表示该成员变量不需要被序列化。当对象被序列化时,transient修饰的成员变量将被忽略。 实现Serializable接口的示例代码 以下是一个简单的示例代码,演示如何实现...

    c#对象序列化和反序列化,压缩流

    在C#编程中,对象序列化和反序列化是至关重要的技术,它们允许我们将对象的状态转化为可存储或可传输的数据格式,例如XML、JSON或二进制,以便于保存、恢复或者在网络间传递。而“压缩流”则涉及到数据的压缩和解...

    Java序列化对象工具类 Eclipse工程(SerializUtil.zip)

    1. **对象序列化**: 这个方法将一个Java对象转换为字节数组,可以用于存储到文件或数据库的Blob字段。实现方式通常是使用`ObjectOutputStream`,它能处理任何实现了`Serializable`接口的对象,并将其状态写入流中。 ...

    java 序列化时排除指定属性

    Java序列化默认会序列化对象的所有属性,但可以通过以下两种方式排除指定属性: - **使用`transient`关键字**:在要排除的属性前添加`transient`关键字。例如: ```java public class MyClass implements ...

    c#对象序列化与反序列化实例

    在C#编程中,对象序列化和反序列化是至关重要的技术,它们允许开发者将复杂的对象状态转换为可存储或可传输的数据格式,如XML、JSON或二进制流。对象序列化通常用于持久化数据、跨进程通信、网络传输等场景。下面...

    Visual C++中对象的序列化与文件I-O研究.rar_c++对象序列化_对象序列化_序列化

    在C++编程中,对象序列化是一个重要的概念,它涉及到将程序中的对象状态转换为可以存储或传输的数据格式,如二进制或文本文件。这一过程通常用于持久化数据、跨进程通信或在网络上传输对象。在Visual C++环境下,...

    Odin - Inspector and Serialize游戏对象序列化插件.rar

    《Odin - Inspector and Serializer游戏对象序列化插件》是一款专为Unity引擎设计的强大工具,旨在优化游戏对象的序列化过程以及提供高级的Inspector视图。这个插件极大地提升了开发效率,让开发者能够更轻松地管理...

    Java序列化(Serializable)与反序列化__1.docx

    1. Object Serialize:Java内置的序列化机制,通过实现`Serializable`接口来实现对象的序列化。在进行反序列化时,Java会验证`serialVersionUID`,确保对象在序列化和反序列化之间的一致性。 2. JSON:通过将对象...

    基于boost的序列化与反序列化

    `serialize()` 函数用于实际的数据存取,而 `save_construct_data()` 用于保存构造对象所需的信息,以便在反序列化时重建对象。 例如,对于一个名为`MyClass`的类,你可以这样定义序列化: ```cpp class MyClass {...

    在.NET中实现对象序列化

    要进行序列化,可以创建一个`XmlSerializer`实例,传入待序列化对象的类型,然后使用`Serialize`方法将对象写入到流或文本文件中: ```csharp using (var writer = new StreamWriter("order.xml")) { var ...

    对象序列化和反序列化是怎么回事

    在Java中,实现对象序列化可以很简单,只需要让类实现`java.io.Serializable`接口即可。例如: ```java public class MySerializableObject implements Serializable { private String name; private int age; ...

    Java序列化框架,可以任意Java对象序列化为字节数组并且完成反序列化 支持任意Java类型,序列化的对象不需要特殊接口即可

    //执行序列化,会将序列化对象序列化到二进制数组容 fse.serialize(data, buf); byte[] resultBytes = buf.toArray(); buf.clear(); //填入数据,准备进行反序列化 buf.put(resultBytes); TestData result = ...

Global site tag (gtag.js) - Google Analytics