使用byte[] 数组存储object对象
使用byte[] 数组存储object对象
byte[]
是一种用于存储字节数据的数组,不能直接用来存储对象(Object
)。
但是可以将一个对象序列化为字节数组,然后将这个字节数组存储在 byte[]
中。
序列化是将对象的状态转换为字节流的过程,而反序列化是将字节流转换回对象的过程。
如何将对象存储为 byte[]
?
你可以使用 Java 内置的序列化机制来实现这一点。具体步骤如下:
- 对象类实现
Serializable
接口: 使你的对象类实现Serializable
接口,以便它能够被序列化。 - 将对象序列化为
byte[]
: 使用ObjectOutputStream
将对象写入ByteArrayOutputStream
,从而获得字节数组。 - 将
byte[]
反序列化为对象: 使用ObjectInputStream
从ByteArrayInputStream
中读取字节数据并将其转换回对象。
代码
以下示例演示如何将对象序列化为 byte[]
并反序列化回对象:
对象类
import java.io.Serializable;
public class MyObject implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int value;
public MyObject(String name, int value) {
this.name = name;
this.value = value;
}
@Override
public String toString() {
return "MyObject{name='" + name + "', value=" + value + '}';
}
}
序列化和反序列化方法
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializationUtil {
// 序列化对象为 byte[]
public static byte[] serialize(Object obj) throws Exception {
try (
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream)
) {
objectOutputStream.writeObject(obj);
// try-with-resources写法,在try块结束会自动objectOutputStream.close();
return byteArrayOutputStream.toByteArray();
}
}
// 反序列化 byte[] 为对象
public static Object deserialize(byte[] bytes) throws Exception {
try (
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream)
) {
return objectInputStream.readObject();
}
}
}
测试序列化和反序列化
public class Main {
public static void main(String[] args) {
try {
// 创建对象
MyObject originalObject = new MyObject("example", 42);
// 序列化对象
byte[] serializedData = SerializationUtil.serialize(originalObject);
System.out.println("Serialized data: " + java.util.Arrays.toString(serializedData));
// 反序列化对象
MyObject deserializedObject = (MyObject) SerializationUtil.deserialize(serializedData);
System.out.println("Deserialized object: " + deserializedObject);
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果
Serialized data: [ac, ed, 00, 05, 73, 72, 00, 09, 4d, 79, 4f, 62, 6a, 65, 63, 74, 00, 00, 00, 00, 00, 00, 00, 01, 02, 00, 02, 4c, 00, 04, 6e, 61, 6d, 65, 74, 00, 12, 4c, 6a, 61, 76, 61, 2f, 6c, 61, 6e, 67, 2f, 53, 74, 72, 69, 6e, 67, 3b, 49, 00, 05, 76, 61, 6c, 75, 65, 78, 70, 74, 00, 07, 65, 78, 61, 6d, 70, 6c, 65, 00, 00, 00, 2a]
Deserialized object: MyObject{name='example', value=42}
rds_blogs