2011-01-09 28 views
5

Nếu tôi có một thể hiện của một lớp mà tôi lưu trữ trong một phiên, tôi cần phải làm cho nó có thể tuần tự hóa được. Lớp này có một biến tĩnh, điều này sẽ được tuần tự hóa trong mọi trường hợp được lưu trữ?công việc serializable trong java như thế nào?

Biến tĩnh là tham chiếu đến bộ nhớ cache chứa nhiều dữ liệu trong nền. Tất cả dữ liệu này có được đăng theo thứ tự không? Nếu vậy, có vẻ thích hợp hơn khi biến biến này thành tạm thời và tìm nạp lại cá thể bộ nhớ cache mỗi lần cá thể được khôi phục. Có thể không lưu trữ thể hiện cache ở tất cả trong lớp.

Trình xây dựng có thực thi khi lớp được khôi phục từ trạng thái được tuần tự hóa không? nếu không có phương pháp nào khác tôi có thể sử dụng để tái instate một biến thoáng qua?

+1

Phương thức khởi tạo no-arg của siêu lớp không thể nối tiếp được sinh ra nhiều nhất được thực hiện, nhưng không phải là các hàm tạo của các lớp được tuần tự hóa. 'readObject' (hoặc' readObjectNoData' có thể thay thế deserialisation mặc định (xem tài liệu API) –

+0

@Tom, thay thế? Vì vậy, nếu tôi thực hiện một trong những phương pháp tôi cần phải xử lý tất cả các serialization của bản thân mình? – KTrum

+0

Trumstedt Nói chung bạn sẽ điều đầu tiên mà phương thức nên làm là gọi 'defaultReadObject' hoặc' readFields' –

Trả lời

11

Lớp này có một biến tĩnh, sẽ này được tuần tự trong mọi trường hợp lưu trữ?

No. Theo Java Object Serialization Specificaiton: "Trường tuần tự mặc định của lớp được xác định là trường không phải tạm thời và không tĩnh".

Trình xây dựng có thực thi khi lớp được khôi phục từ trạng thái được tuần tự hóa không?

No. Deserialization bypasses constructors (trừ khi bạn có siêu lớp không tuần tự hóa).

nếu không có phương pháp nào khác tôi có thể sử dụng để tái kích hoạt biến tạm thời?

Bạn có thể sử dụng phương thức readObject() cho điều đó, như được mô tả trong tài liệu API Serializable.

+4

Bạn luôn có một siêu lớp không nối tiếp. –

3

trường tĩnh và tạm thời không được đăng. Không, nhà xây dựng không được gọi. Để biết thêm chi tiết, xin vui lòng kiểm tra này: http://java.sun.com/developer/technicalArticles/ALT/serialization/

+0

Tĩnh có thể được serialized, bạn có thể muốn xem http: //www.ecst. csuchico.edu/~amk/foo/advjava/notes/serial.htm –

+1

Cảm ơn phản hồi của bạn, nhưng vui lòng kiểm tra liên kết.Tôi không thể làm cho nó hoạt động. Mặc dù tôi giải thích câu hỏi là một biến tĩnh sẽ là rialized theo mặc định với mỗi trường hợp, và afaik, hành vi mặc định cho tuần tự hóa là dữ liệu tĩnh không được tuần tự hóa vì nó không được coi là một phần của trạng thái của đối tượng. –

+0

liên kết cố định = http://www.ecst.csuchico.edu/~amk/foo/advjava/notes/serial.html –

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