`
chen_yongkai
  • 浏览: 61526 次
  • 性别: 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对象序列化 传输 保存

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

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

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

    Java实现序列化例子

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

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

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

    java反序列化利用工具

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

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

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

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

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

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

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

    java反序列香草

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

    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序列化反序列化

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

    时间序列算法java实现

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

    Java序列化的简单例子

    3. 数据库存储:可以将对象序列化后存储到数据库中,然后在需要时反序列化回来。 Java 序列化是一种非常实用的机制,可以将对象转换为字节流,以便存储或传输。但是,需要注意的是,序列化后的对象可能会因为版本号...

    protostuff是一个支持各种格式的一个序列化Java类库

    Protostuff允许开发者将Java对象序列化为XML文档,并能够反序列化回对象。 - **YAML (YAML Ain't Markup Language)**:一种数据序列化的语言,强调人类可读性。在Protostuff的帮助下,开发者可以在Java应用程序中...

    xml文件自动转成java对象工具

    5. **生成序列化和反序列化代码**:为了方便XML数据和Java对象之间的转换,工具还会生成解析XML和生成XML的代码,通常是基于JAXB(Java Architecture for XML Binding)或其他类似库。 除了XSD转Java,有些工具还...

    《Java2程序设计实用教程(第2版)》例题

    《Java2程序设计实用教程(第2版)》是一本深入浅出的Java编程学习教材,旨在帮助初学者和有经验的程序员掌握Java语言的核心概念和技术。本书通过丰富的例题来讲解各种Java编程技巧和实战应用,使得学习过程更加直观和...

    java对象转对象插件

    在Java编程语言中,对象与数据结构之间的转换是常见的需求,尤其在数据处理、序列化、网络通信等场景。"java对象转对象插件"旨在简化这个过程,提供了一种便捷的方式来将Java对象转换为Map、List、Set或其他对象,...

    实用JAVA教程:基于BLUEJ的对象优先方法 第三版

    - ObjectInputStream/ObjectOutputStream:学习如何序列化和反序列化对象。 6. **面向接口编程** - 接口:理解接口的作用,如何定义接口,以及如何实现接口。 - 接口与多态:通过接口实现不同类之间的多态性。 ...

    支持javax.money数据类型的JSON序列化和反序列化

    这个模块实现了`Module`接口,可以注册到Jackson的`ObjectMapper`中,从而使得`Money`、`MonetaryAmount`等货币相关类能够被正确地序列化为JSON字符串,并从JSON字符串反序列化回Java对象。 `javax.money`是JSR 354...

Global site tag (gtag.js) - Google Analytics