Tags:

Cách convert Object sang Byte Array trong Java

Trong bài viết ngắn này chúng ta sẽ cùng nhau tìm cách convert một object sang byte array trong Java và ngược lại.

Sử dụng Java thuần

Ví dụ chúng ta có một User class như sau

public class User implements Serializable {
    private String name;

    @Override
    public String toString() {
        return "User{name=" + name +  "}";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Chúng ta có thể sử dụng ByteArrayOutputStreamObjectOutputStream để convert một object sang byte array và  ByteArrayInputStreamObjectInputStream để convert byte array ngược trở lại một object trong Java.

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Main {

    public static void main(String[] args) throws Exception {
        User user = new User();
        user.setName("Deft");

        // covert object sang byte array
        byte[] data;
        try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
             ObjectOutputStream oos = new ObjectOutputStream(bos)) {
            oos.writeObject(user);
            data = bos.toByteArray();
        }

        // convert byte array sang object
        try (ByteArrayInputStream bis = new ByteArrayInputStream(data);
             ObjectInputStream ois = new ObjectInputStream(bis)) {
            User deserializedUser = (User) ois.readObject();
            System.out.println(deserializedUser);
        }
    }

}

Output

User{name=Deft}

Lưu ý User class phải implement Serializable interface, nếu không thì quá trình convert sẽ xảy ra lỗi NotSerializableException.

Sử dụng Apache Commons Lang

Apache Commons Lang có lẽ là một thư viện quá nổi tiếng với rất nhiều Utils class phổ biến và được sử dụng rất rộng rãi. Tất nhiên là nó cũng cung cấp SerializationUtils class cho phép convert Object sang byte array và ngược lại một cách nhanh chóng và tiện lợi hơn.

import org.apache.commons.lang3.SerializationUtils;

public class Main {

    public static void main(String[] args) throws Exception {
        User user = new User();
        user.setName("Deft");

        // covert object sang byte array
        byte[] data = SerializationUtils.serialize(user);

        User deserializedUser = (User) SerializationUtils.deserialize(data);
        System.out.println(deserializedUser);
    }

}

Output

User{name=Deft}

SerializationUtils trong Spring framework

Cũng tương tự như Apache Commons Lang, Spring cũng cũng cấp một SerializationUtils có chức năng tương đồng. Nếu đang phát triển dự án dựa trên Spring Framework thì có thể các bạn không cần dùng đến Apache Commons Lang.

byte[] data = SerializationUtils.serialize(user);

User deserializedUser = (User) SerializationUtils.deserialize(data);

Tóm lược

Qua bài viết này chúng ta đã biết cách convert một object sang byte array và ngược lại trong Java với một số cách khác nhau. Mình khuyến khích các bạn sử dụng thư viện vì nó giúp code trong ngắn gọn và dễ đọc hơn. Tuy nhiên hãy đảm bảo mình đã hiểu bản chất hoạt động trước khi sử dụng chúng.

Nguồn: Baeldung

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x