Mục lục
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 ByteArrayOutputStream và ObjectOutputStream để convert một object sang byte array và ByteArrayInputStream và ObjectInputStream để 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