将Integer集合序列化为字节数组并将其反序列化

时间:2017-05-04 09:52:54

标签: java arrays serialization

我需要对Collection<Integer>进行序列化和反序列化,以便将其存储在需要byte[]的Redis中。我找到了使用ByteBufferIntBuffer进行序列化的代码:

byte[] serializeIntegerCollection(Collection<Integer> collection) {
    ByteBuffer byteBuffer = ByteBuffer.allocate(collection.size() * 4);
    IntBuffer intBuffer = byteBuffer.asIntBuffer();
    collection.forEach(intBuffer::put);
    return byteBuffer.array();
}

现在我尝试用于反序列化的代码:

Collection<Integer> deserializeIntegerCollection(byte[] bytes) {
    ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
    IntBuffer intBuffer = byteBuffer.asIntBuffer();
    return asList(intBuffer.array());
}

但是intBuffer.array()会抛出UnsupportedOperationException。它有什么问题以及如何处理这个问题?

1 个答案:

答案 0 :(得分:-1)

您可以将其序列化为。 serializeIntegerCollection类必须实现可序列化

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

您可以将其反序列化为。 deserializeIntegerCollectionclass

ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes)); @SuppressWarnings("unchecked") Collection<Integer> collection= (Collection<Integer>) ois.readObject();