有人问及相关问题,就顺便贴出代码。其实方法都很简单:
//对象序列化写入文件
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);
}
}
分享到:
相关推荐
Java对象序列化是一种将Java对象转换为...总之,Java对象序列化是一个强大且实用的功能,它在数据持久化、网络通信等多个场景下都有广泛的应用。理解并掌握序列化机制,对于开发Java应用程序尤其是分布式系统至关重要。
序列化的过程就是对象写入字节流和从字节流中读取对象。将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其...对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。
1. **对象序列化**: - 创建可序列化的类:首先,你需要定义一个类,并且在类声明中加入`implements Serializable`,例如: ```java public class MySerializableClass implements Serializable { // 类的属性 ...
Java反序列化是一种将已序列化的对象状态转换回对象的过程,通常用于持久化数据或在网络间传输对象。然而,这个过程也可能带来安全风险,因为恶意用户可以构造特殊的序列化数据来执行任意代码,这就是所谓的Java反序...
Java反序列化是一种将已序列化的对象状态转换回对象的过程,通常用于持久化数据或在网络间传输对象。在Java中,这一过程涉及到`java.io.ObjectInputStream`类,它能够读取由`java.io.ObjectOutputStream`写入的字节...
1. **对象序列化**: 这个方法将一个Java对象转换为字节数组,可以用于存储到文件或数据库的Blob字段。实现方式通常是使用`ObjectOutputStream`,它能处理任何实现了`Serializable`接口的对象,并将其状态写入流中。 ...
这会将对象序列化并发送到服务器。 ```java Socket socket = new Socket(serverAddress, serverPort); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); out.writeObject(message); ...
java 序列化 对象 Serializable 写着玩的Demo 简单 实用
Java反序列化是Java编程语言中的一个特性,允许将对象的状态转换为字节流,然后在需要时恢复这些状态。这个过程通常用于持久化对象,网络传输或在不同应用程序之间共享数据。然而,由于设计上的漏洞,反序列化也可能...
2. commons-lang3-3.3.2.jar:Apache Commons Lang库提供了许多实用的Java语言功能,包括序列化和反序列化的辅助工具,如`SerializationUtils`类,可用于简化对象的序列化和反序列化操作。 3. commons-beanutils-...
总结,Android序列化对象存储到SharedPreferences是一种实用技巧,它结合了Java序列化和Android的SharedPreferences机制,为开发者提供了在应用间保存简单对象的便捷方式。然而,由于SharedPreferences的局限性,...
java序列化反序列化 可以将一个对象保存起来哦,哈哈,很实用,别忘了实现序列化接口
在`TimeDemo1`这个示例中,可能包含了具体的Java代码实现,例如创建一个时间序列类,定义预测方法,以及一个主程序来测试和展示预测结果。你可以通过阅读和理解这段代码来加深对时间序列预测的理解,并将其应用到...
3. 数据库存储:可以将对象序列化后存储到数据库中,然后在需要时反序列化回来。 Java 序列化是一种非常实用的机制,可以将对象转换为字节流,以便存储或传输。但是,需要注意的是,序列化后的对象可能会因为版本号...
Protostuff允许开发者将Java对象序列化为XML文档,并能够反序列化回对象。 - **YAML (YAML Ain't Markup Language)**:一种数据序列化的语言,强调人类可读性。在Protostuff的帮助下,开发者可以在Java应用程序中...
5. **生成序列化和反序列化代码**:为了方便XML数据和Java对象之间的转换,工具还会生成解析XML和生成XML的代码,通常是基于JAXB(Java Architecture for XML Binding)或其他类似库。 除了XSD转Java,有些工具还...
《Java2程序设计实用教程(第2版)》是一本深入浅出的Java编程学习教材,旨在帮助初学者和有经验的程序员掌握Java语言的核心概念和技术。本书通过丰富的例题来讲解各种Java编程技巧和实战应用,使得学习过程更加直观和...
在Java编程语言中,对象与数据结构之间的转换是常见的需求,尤其在数据处理、序列化、网络通信等场景。"java对象转对象插件"旨在简化这个过程,提供了一种便捷的方式来将Java对象转换为Map、List、Set或其他对象,...
- ObjectInputStream/ObjectOutputStream:学习如何序列化和反序列化对象。 6. **面向接口编程** - 接口:理解接口的作用,如何定义接口,以及如何实现接口。 - 接口与多态:通过接口实现不同类之间的多态性。 ...
这个模块实现了`Module`接口,可以注册到Jackson的`ObjectMapper`中,从而使得`Money`、`MonetaryAmount`等货币相关类能够被正确地序列化为JSON字符串,并从JSON字符串反序列化回Java对象。 `javax.money`是JSR 354...