`
chen_yongkai
  • 浏览: 61978 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

Java对象序列化实用方法集

阅读更多
有人问及相关问题,就顺便贴出代码。其实方法都很简单:
	//对象序列化写入文件
	public static void writeObject(Object obj, File file) throws FileNotFoundException, IOException {
		if (obj == null)
			throw new NullPointerException("obj are null.");
		ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(
				new FileOutputStream(file)));
		try {
			oos.writeObject(obj);
		} finally {
			oos.close();
		}
	}
  //对象序列化并压缩写入文件
	public static void writeCompressedObject(Object obj, File file) throws FileNotFoundException,
			IOException {
		if (obj == null)
			throw new NullPointerException("obj are null.");
		ObjectOutputStream oos = new ObjectOutputStream(new GZIPOutputStream(new FileOutputStream(
				file)));
		try {
			oos.writeObject(obj);
		} finally {
			oos.close();
		}
	}
	//从文件读取序列化的对象
	public static <T> T readObject(File src) throws IOException, ClassNotFoundException {
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(src)));
			return (T) ois.readObject();
		} finally {
			ois.close();
		}
	}
  //从文件读取序列化并压缩的对象
	public static <T> T readCompressedObject(File src) throws IOException, ClassNotFoundException {
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new GZIPInputStream(new FileInputStream(src)));
			return (T) ois.readObject();
		} finally {
			ois.close();
		}
	}


如果要对序列化结果做加密,原理类似,加密算法有很多,不多说了。
以上是Java对象序列化的文件操作,下面展示与字节数组的相互转换。
	public static <T extends Serializable> byte[] getBytes(T obj) throws IOException {
		byte[] b = serialize(obj, false).toByteArray();
		return b;
	}

	public static <T extends Serializable> byte[] getCompressedBytes(T obj) throws IOException {
		byte[] b = serialize(obj, true).toByteArray();
		return b;
	}

	private static <T extends Serializable> ByteArrayOutputStream serialize(T obj, boolean compressed)
			throws IOException {
		ByteArrayOutputStream buf = new ByteArrayOutputStream();
		ObjectOutputStream oos = null;
		try {
			if (compressed)
				oos = new ObjectOutputStream(new GZIPOutputStream(buf));
			else
				oos = new ObjectOutputStream(buf);
			oos.writeObject(obj);
		} finally {
			if (oos != null)
				oos.close();
		}
		return buf;
	}

	public static <T extends Serializable> T getObject(byte[] b) throws IOException,
			ClassNotFoundException {
		return deserialize(b, false);
	}

	public static <T extends Serializable> T getCompressedObject(byte[] b) throws IOException,
			ClassNotFoundException {
		return deserialize(b, true);
	}

	private static <T extends Serializable> T deserialize(byte[] data, boolean compressed)
			throws IOException, ClassNotFoundException {
		ByteArrayInputStream in = new ByteArrayInputStream(data);
		ObjectInputStream ois = null;
		try {
			if (compressed)
				ois = new ObjectInputStream(new GZIPInputStream(in));
			else
				ois = new ObjectInputStream(in);
			return (T) ois.readObject();
		} finally {
			IOUtils.close(ois);
		}
	}

0
3
分享到:
评论

相关推荐

    JAVA对象序列化保存为XML文件的工具类

    【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...

    java对象序列化 传输 保存

    Java对象序列化是一种将Java对象转换为...总之,Java对象序列化是一个强大且实用的功能,它在数据持久化、网络通信等多个场景下都有广泛的应用。理解并掌握序列化机制,对于开发Java应用程序尤其是分布式系统至关重要。

    介绍Java对象序列化使用基础

    序列化的过程就是对象写入字节流和从字节流中读取对象。将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其...对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。

    Java实验7 序列化.doc

    Java序列化是将Java对象转换为字节流的过程,以便可以存储在磁盘上或通过网络进行传输。这个过程对于持久化对象数据、跨进程通信和在网络上传输对象非常有用。在Java中,序列化是通过实现`Serializable`接口来完成的...

    java反序列化利用程序UI版Beta1.1.zip

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,通常用于持久化数据或在网络间传输对象。然而,这个过程也可能带来安全风险,因为恶意用户可以构造特殊的序列化数据来执行任意代码,这就是所谓的Java反序...

    Java实现序列化例子

    1. **对象序列化**: - 创建可序列化的类:首先,你需要定义一个类,并且在类声明中加入`implements Serializable`,例如: ```java public class MySerializableClass implements Serializable { // 类的属性 ...

    java反序列化利用工具

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,通常用于持久化数据或在网络间传输对象。在Java中,这一过程涉及到`java.io.ObjectInputStream`类,它能够读取由`java.io.ObjectOutputStream`写入的字节...

    java序列化原理与算法

    2. **对象持久化**:为了将内存中的对象状态保存到磁盘上,以备后续使用,也需要将对象序列化。 3. **对象复制**:在某些情况下,需要创建对象的精确副本,序列化是实现这一目的的有效手段之一。 #### Java序列化的...

    什么是Java的序列化和反序列化?如何实现对象的序列化和反序列化?(java面试题附答案).txt

    // 将对象序列化到文件 serializeObject(person, "person.ser"); // 从文件中反序列化对象 Person deserializedPerson = deserializeObject("person.ser"); // 打印反序列化后的对象 System.out.println(...

    Java反序列化实战.pdf

    - **Java-Deserialization-Cheat-Sheet**:提供了一系列关于Java反序列化的实用指南和技巧汇总。 #### 四、总结 通过深入分析Fastjson和Weblogic的经典案例,我们可以看到,虽然反序列化技术在实际应用中带来了...

    Java反序列化漏洞探析及其修复方法研究.pdf

    Java反序列化漏洞的产生原理主要是在对象反序列化过程中,由于程序对输入数据控制不严,可能会产生非预期的对象,进而可能带来任意代码执行的问题。攻击者可以利用这一漏洞,通过精心构造的数据序列化后,由应用程序...

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

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

    java反序列香草

    Java反序列化是Java编程语言中的一个特性,允许将对象的状态转换为字节流,然后在需要时恢复这些状态。这个过程通常用于持久化对象,网络传输或在不同应用程序之间共享数据。然而,由于设计上的漏洞,反序列化也可能...

    java 简单 网络套接字 序列化&反序列化实用实例,可供初学习者学习

    这会将对象序列化并发送到服务器。 ```java Socket socket = new Socket(serverAddress, serverPort); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); out.writeObject(message); ...

    java对象序列化Demo------------Serializable

    java 序列化 对象 Serializable 写着玩的Demo 简单 实用

    Jedis序列化和反序列化使用jar

    2. commons-lang3-3.3.2.jar:Apache Commons Lang库提供了许多实用的Java语言功能,包括序列化和反序列化的辅助工具,如`SerializationUtils`类,可用于简化对象的序列化和反序列化操作。 3. commons-beanutils-...

    Android 序列化对象存储到sharepreference

    总结,Android序列化对象存储到SharedPreferences是一种实用技巧,它结合了Java序列化和Android的SharedPreferences机制,为开发者提供了在应用间保存简单对象的便捷方式。然而,由于SharedPreferences的局限性,...

    基于混合分析的Java反序列化利用链挖掘方法.docx

    序列化是将Java对象转换为可存储或传输的形式(如字节序列、JSON字符串或XML字符串),而反序列化则是这一过程的逆向操作。在许多应用场景中,如远程过程调用(RPC)或HTTP请求参数处理时,反序列化操作频繁出现。例如...

    java序列化反序列化

    java序列化反序列化 可以将一个对象保存起来哦,哈哈,很实用,别忘了实现序列化接口

    时间序列算法java实现

    在`TimeDemo1`这个示例中,可能包含了具体的Java代码实现,例如创建一个时间序列类,定义预测方法,以及一个主程序来测试和展示预测结果。你可以通过阅读和理解这段代码来加深对时间序列预测的理解,并将其应用到...

Global site tag (gtag.js) - Google Analytics