在Java中,如何将对象列表转换为字节数组?

15

可能重复:
在Java中将任何对象转换为字节数组

我有一个需要被缓存的类。缓存API提供了一个接口来缓存byte[]。我的类包含一个字段作为List<Author>,其中Author是另一个类。我该如何正确地将List<Author>转换为byte[]以进行缓存?并从缓存中检索byte[]以重构List<Author>

关于Author类的更多细节:它非常简单,只有两个String字段。一个String字段可能为null


3
http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html - Brian Roach
3个回答

33

作者类应该实现Serializable接口。

这样,您就可以使用ObjectOutputStream将对象序列化并使用ByteArrayOutputStream以字节形式编写它。

然后使用ObjectInputStream反序列化并进行转换。

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bos);
    oos.writeObject(list);
    byte[] bytes = bos.toByteArray();

这个问题已经关闭,不确定人们是否能够阅读它。但是让我们测试一下stackoverflow的威力:当我实现Serializable接口时,我应该提供一个serialVersionID,它应该是一个UID。问题是,我是否应该提供它或者可以省略它。如果我应该提供它,那么如何提供?任何UID都可以吗? - Steve

2

Author类序列化,并将列表写入由ByteArrayOutputStream支持的ObjectOutputStream


1

将您的类序列化;在字节流上创建ObjectStream,并将列表写入ObjectStream。将来自ByteStream的字节缓冲区传递给缓存API。

从缓存中检索时,您需要反向执行此过程。从缓存API返回的byte[]创建一个ByteStream;从ByteStream创建一个ObjectStream;从ObjectStream读取您的集合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接