Перейти к основному содержимому

Преобразование объекта в массив байтов в Java

· 2 мин. чтения

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 , чтобы выполнить работу.