我需要将对象转换为要存储在 Tokyo Cabinet 键值存储中的 byte[]。从键值存储读取时,我还需要将 byte[] 转换为 Object 。
是否有任何软件包可以帮助我完成这项任务?还是自己实施它的最佳解决方案?
我需要将对象转换为要存储在 Tokyo Cabinet 键值存储中的 byte[]。从键值存储读取时,我还需要将 byte[] 转换为 Object 。
是否有任何软件包可以帮助我完成这项任务?还是自己实施它的最佳解决方案?
public static byte[] serialize(Object obj) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(out);
os.writeObject(obj);
return out.toByteArray();
}
public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException {
ByteArrayInputStream in = new ByteArrayInputStream(data);
ObjectInputStream is = new ObjectInputStream(in);
return is.readObject();
}
如果你的类 extends Serializable
,你可以通过 a 读写对象ByteArrayOutputStream
,这就是我通常做的。
来自commons-lang的使用serialize
和deserialize
方法。SerializationUtils
您可以查看 Hector 如何为 Cassandra 执行此操作,其中目标是相同的 - 将所有内容相互转换byte[]
,以便从 NoSQL 数据库存储/检索 -请参见此处。对于原始类型(+String),有特殊的序列化器,否则有泛型ObjectSerializer
(期望Serializable
和使用ObjectOutputStream
)。当然,您可以只将它用于所有内容,但序列化形式中可能存在冗余元数据。
我想你可以复制整个包并使用它。
您可以使用 ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
ObjectClass object = objectMapper.readValue(data, ObjectClass.class);
如果您不想序列化,可以使用对象映射器
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
ByteArrayOutputStream out = new ByteArrayOutputStream();
objectMapper.writeValue(out,obj);
byte[] data = out.toByteArray();