2009-09-30 15 views
6

Tôi đang tìm định dạng mà Java sử dụng để sắp xếp các đối tượng. Serialization mặc định serializes đối tượng trong một định dạng nhị phân. Đặc biệt, tôi tò mò muốn biết liệu hai lần chạy chương trình có thể tuần tự hóa cùng một đối tượng khác nhau hay không.Đại diện của Java đối tượng được tuần tự hóa

Điều kiện nào một đối tượng nên đáp ứng để đối tượng duy trì hành vi của nó theo tuần tự tuần tự hóa/tuần tự hóa mặc định của Java?

Trả lời

0

Tôi thích ví dụ về @Stephen C của Object.hashCode(). Nếu các mã băm không xác định được tuần tự hóa, thì khi chúng ta deserialize, các mã băm sẽ không được sử dụng. Ví dụ, nếu chúng ta tuần tự hóa một HashMap hoạt động dựa trên Object.hashCode(), phiên bản deserialized của nó sẽ hoạt động khác với bản đồ ban đầu. Đó là, tìm kiếm cùng một đối tượng sẽ cho chúng ta kết quả khác nhau trong hai bản đồ.

+0

Thay đổi câu hỏi ban đầu của bạn, không hỏi lại câu trả lời theo nguyên tắc StackOverflow. – Peter

+0

Chắc chắn. Tôi đã chuyển câu hỏi của mình. Nó thực sự là một sự cải cách của câu hỏi ban đầu. – reprogrammer

2

Nếu bạn có hai đối tượng với tất cả các thuộc tính được đặt thành giá trị giống hệt nhau, thì chúng sẽ được sắp xếp theo cùng một cách.

Nếu không lặp lại được thì không hữu ích!

+0

@Kieveli: không đúng sự thật. Xem xét trường hợp của các cấu trúc dữ liệu HashSet và HashMap. –

1

Chúng sẽ luôn luôn tuần tự hóa theo cùng một cách. Nếu đây không phải là trường hợp, sẽ không có gì đảm bảo rằng một chương trình khác có thể loại bỏ dữ liệu một cách chính xác, đánh bại mục đích tuần tự hóa.

+0

Có phải nó rò rỉ bất kỳ thông tin nào có thể thay đổi trong các lần thực hiện chương trình khác nhau, chẳng hạn như địa chỉ bộ nhớ đối tượng không? – reprogrammer

+0

Không. Nó là xa như tôi biết một đại diện thuần túy của đối tượng và giá trị của nó chỉ; các dữ liệu cần thiết để tạo lại đối tượng khi không được tuần tự hóa và không có gì khác. – Peter

+2

Không có lý do cố hữu nào khiến một serialization của cùng một đối tượng hai lần cần tạo ra cùng một chuỗi byte. Ví dụ, chúng có thể được mã hóa với các khóa khác nhau. Vì vậy, miễn là khóa đứng trước đối tượng trong luồng dữ liệu tuần tự hóa và thuật toán mã hóa đã được biết, bất kỳ chương trình nào khác có thể dễ dàng giải mã luồng và tạo lại đối tượng gốc. Không có lý do gì để tin rằng việc tuần tự hóa Java thực hiện điều này, nhưng nó có thể hình dung được. – Alohci

-2

Tôi đang tìm định dạng Java sử dụng để sắp xếp các đối tượng.

Không được inane, nó viết chúng bằng cách nào đó. Làm thế nào chính xác đó là có thể và có lẽ nên được xác định bởi bạn. Một ký tự ánh xạ tới .... uh, nó được tham gia nhưng thay vì phát minh lại bánh xe, hãy để chúng tôi hỏi chính xác bạn cần gì để có thể xây dựng lại một đối tượng cho trạng thái nào?

Tuần tự hóa mặc định tuần tự hóa đối tượng ở định dạng nhị phân.

Vì vậy? (Một lần nữa, không cố gắng trở thành ngớ ngẩn - Nghe có vẻ như chúng ta cần phải xác định một vấn đề mà có thể không có dữ liệu concepted)

Tôi tò mò muốn biết nếu hai chạy của một chương trình thể serialize cùng đối tượng khác nhau .

Nếu bạn có Luồng thông tin, bạn sẽ xác định điều gì nêu rõ đối tượng cần được khôi phục?

1

Thường chạy cùng một thuật toán một luồng với cùng một dữ liệu sẽ dẫn đến kết quả tương tự.

Tuy nhiên, những thứ như thứ tự mà các mục nhập HashSet nối tiếp không được đảm bảo. Thật vậy, một đối tượng có thể được thay đổi một cách tinh tế khi được tuần tự hóa.