2013-01-03 33 views
7

thể trùng lặp:
Converting any object to a byte array in javaTrong Java, làm thế nào để chuyển đổi một danh sách các đối tượng thành mảng byte?

Tôi đã một lớp học mà cần phải được lưu trữ. API bộ nhớ cache cung cấp giao diện lưu trữ byte[]. Lớp học của tôi có một trường là List<Author>, trong đó Author là một lớp khác. Cách chính xác để tôi có thể biến List<Author> thành byte[] để lưu vào bộ nhớ đệm là gì? Và truy xuất byte[] từ bộ nhớ cache để tạo lại List<Author>?

Thông tin chi tiết về Author lớp: rất đơn giản, chỉ có hai trường String. Một trường có thể là null.

+3

http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html –

Trả lời

14

Author lớp nên thực hiện Serializable

Sau đó, bạn có thể sử dụng ObjectOutputStream serialize đối tượng và ByteArrayOutputStream để làm cho nó viết như byte.

Sau đó, deserialize nó bằng cách sử dụng ObjectInputStream và chuyển đổi trở lại.

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(bos); 
    oos.writeObject(list); 
    byte[] bytes = bos.toByteArray(); 
+0

Điều này bị đóng để không chắc liệu mọi người có thể đọc hay không. Nhưng hãy kiểm tra sức mạnh của stackoverflow: khi tôi thực hiện giao diện Serializable, tôi phải cung cấp một serialVersionID, mà phải là một UID. Câu hỏi đặt ra là, cho dù tôi có nghĩa vụ cung cấp hay không để từ bỏ nó. Nếu tôi phải cung cấp nó, làm thế nào? Bất kỳ UID là tốt? – Steve

2

Tận dụng tối Author lớp serializable và viết danh sách một ObjectOutputStream được hỗ trợ bởi một ByteArrayOutputStream.

1

Làm cho lớp học của bạn có thể chỉnh sửa được; tạo một ObjectStream trên một ByteStream và viết danh sách của bạn vào ObjectStream. Vượt qua bộ đệm byte từ ByteStream đến API bộ nhớ đệm của bạn.

Khi truy xuất bộ nhớ cache, bạn đảo ngược quy trình. Tạo một ByteStream từ byte [] được trả về bởi API bộ nhớ đệm; tạo một ObjectStream từ ByteStream; đọc bộ sưu tập của bạn từ ObjectStream.

Các vấn đề liên quan