【问题标题】:In Java, how to convert a list of objects to byte array? [duplicate]在Java中,如何将对象列表转换为字节数组? [复制]
【发布时间】:2013-01-03 18:26:07
【问题描述】:

可能重复:
Converting any object to a byte array in java

我有一个需要缓存的类。缓存 API 提供了一个缓存byte[] 的接口。我的班级包含一个字段为List<Author>,其中Author 是另一个班级。我将List<Author> 转为byte[] 进行缓存的正确方法是什么?并从缓存中检索byte[] 以重构List<Author>

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

【问题讨论】:

标签: java caching


【解决方案1】:

作者类应该实现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 都可以吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    让你的类可序列化;在 ByteStream 上创建一个 ObjectStream 并将您的列表写入 ObjectStream。将字节缓冲区从 ByteStream 传递到您的缓存 API。

    当从缓存中检索时,您会反转该过程。从缓存 API 返回的 byte[] 创建一个 ByteStream;从 ByteStream 创建一个 ObjectStream;从 ObjectStream 中读取您的集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 2013-03-03
      • 2011-08-15
      • 2011-03-11
      • 2013-07-08
      • 2011-01-10
      • 2016-12-13
      • 2019-09-22
      相关资源
      最近更新 更多