Java: преобразование объекта в byte [] и byte [] в объект (для Tokyo Cabinet) - PullRequest
56 голосов
/ 17 сентября 2010

Мне нужно преобразовать объекты в байт [], чтобы сохранить их в хранилище ключей Tokyo Cabinet.Мне также нужно разблокировать байт [] объекта при чтении из хранилища значений ключей.

Существуют ли какие-либо пакеты, которые помогут мне в этой задаче?Или будет лучшим решением для его реализации самостоятельно?

Ответы [ 4 ]

147 голосов
/ 17 сентября 2010
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();
}
10 голосов
/ 17 сентября 2010

Если ваш класс расширяет Serializable, вы можете писать и читать объекты через ByteArrayOutputStream, это то, что я обычно делаю.

8 голосов
/ 31 марта 2014

Используйте serialize и deserialize методы в SerializationUtils из commons-lang .

5 голосов
/ 17 сентября 2010

Вы можете посмотреть, как Гектор делает это для Cassandra, где цель одна и та же - конвертировать все в byte[] и обратно для хранения / извлечения из базы данных NoSQL - см. Здесь .Для примитивных типов (+ String) существуют специальные сериализаторы, в противном случае есть универсальный ObjectSerializer (ожидающий Serializable и использующий ObjectOutputStream).Конечно, вы можете использовать только это для всего, но в сериализованной форме могут быть избыточные метаданные.

Полагаю, вы можете скопировать весь пакет и использовать его.

...