我需要对Collection<Integer>
进行序列化和反序列化,以便将其存储在需要byte[]
的Redis中。我找到了使用ByteBuffer
和IntBuffer
进行序列化的代码:
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
。它有什么问题以及如何处理这个问题?
答案 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();