1. Обзор
В этом кратком руководстве мы узнаем, как преобразовать объект Java в массив байтов и наоборот .
2. Используйте обычную Java
Например, предположим, что у нас есть класс User :
public class User implements Serializable {
private String name;
@Override
public String toString() {
return "User{name=" + name + "}";
}
// getters and setters
}
Мы можем использовать объект ByteArrayOutputStream
и ObjectOutputStream
для сериализации объекта в массив байтов.
Давайте не забудем использовать try-with-resources , чтобы нам не пришлось беспокоиться о закрытии потоков:
User user = new User();
user.setName("Josh");
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos)) {
oos.writeObject(user);
}
Затем мы будем использовать ByteArrayInputStream
и ObjectInputStream
для десериализации нашего полученного массива байтов в объект перед окончательным преобразованием его в User
:
try (ByteArrayInputStream bis = new ByteArrayInputStream(data);
ObjectInputStream ois = new ObjectInputStream(bis)) {
User deserializedUser = (User) ois.readObject();
System.out.println(deserializedUser);
}
Обратите внимание, что наш класс User
должен реализовывать интерфейс Serializable
. В противном случае приведенный выше код вызовет исключение NotSerializableException
.
3. Используйте Apache Commons Lang
Мы можем использовать класс SerializationUtils из библиотеки
Apache Commons Lang для достижения той же цели.
Этот класс имеет метод с именем serialize()
, который используется для сериализации объекта в массив байтов:
byte[] data = SerializationUtils.serialize(user);
И метод deserialize()
для десериализации массива байтов в объект:
User deserializedUser = SerializationUtils.deserialize(data);
Вышеупомянутые методы имеют параметры типа Serializable.
Итак, нашему классу User
по-прежнему необходимо реализовать интерфейс Serializable
, как это было сделано в нашем простом примере с Java.
4. Используйте класс SerializationUtils
Spring Framework
Наконец, если наш проект уже использует Spring Framework, мы можем использовать класс SerializationUtils из пакета
org.springframework.util
. Имена методов такие же, как в библиотеке Apache Commons Lang.
Во- первых, мы можем сериализовать наш объект User
в массив байтов:
byte[] data = SerializationUtils.serialize(user);
И мы можем десериализовать результат обратно в объект User
:
User deserializedUser = SerializationUtils.deserialize(data);
Как обычно, наш класс User
должен реализовывать интерфейс Serializable
, иначе мы получим исключение NotSerializableException
при запуске приведенного выше кода.
5. Вывод
Таким образом, мы узнали три различных способа преобразования объекта Java в массив байтов и наоборот . Все эти методы требуют, чтобы входной объект реализовал интерфейс Serializable
, чтобы выполнить работу.