Người ta nói rằng cơ chế tuần tự mặc định của Java không hiệu quả lắm vì a) nó phát hiện ra các trường để ghi/đọc qua phản xạ thường chậm b) nó ghi thêm dữ liệu để truyền.Java: hiệu quả của writeObject vs writeExternal
Một cách để làm cho nó hiệu quả hơn là triển khai Externalizable và các phương thức writeExternal/readExternal của nó. Đây là câu hỏi: nếu tôi thay vào đó cung cấp phương thức 'writeObject/readObject' và không gọi deafiltWriteObject/defaultReadObject trong đó, thì cơ chế này sẽ không sử dụng sự phản chiếu để tìm ra các trường để viết/đọc, cộng với nó đã thắng 't viết thêm dữ liệu để dòng (hoặc sẽ nó? không chắc chắn). Vì vậy, từ một quan điểm hiệu quả, đang thực hiện writeObject/readObject được đề cập ở trên giống như thực hiện Externalizable? Hay tùy chọn thứ hai cung cấp một số lợi ích thiết thực hơn mà trước đây không?
EDIT: sự khác biệt, ofcourse, là khi một lớp Serializable thực hiện readObject/writeObject được phân lớp và nếu lớp con có readObject/writeObject riêng của nó, chúng không cần gọi superO readObject/writeObject của siêu. Không phải như vậy nếu siêu/subclass thay vì thực hiện Externalizable. Trong trường hợp này, siêu của writeExternal/readExternal cần được gọi một cách rõ ràng. Tuy nhiên, sự khác biệt này không liên quan từ quan điểm hiệu quả.
Bạn có thể pl. giải thích điều này nhiều hơn một chút: "Vẫn còn một số người đứng đầu trong việc chọn lớp/writeObject/readObject để gọi tiếp theo." Ngoài ra, 'readResolve' không phải là một phần của hợp đồng 'Externalizable', phải không?Vì vậy, tôi là một chút bối rối. – shrini1000
Nó phải xác định lớp nào để gọi readObject hoặc readExternal trừ khi bạn cũng tự làm điều này. readResolve là một phương thức tùy chọn mà bạn có thể sử dụng với Serailizable. Xem liên kết đầu tiên để biết thêm chi tiết. –
Thx. Tôi đã sử dụng readResolve, nhưng đã bị nhầm lẫn bởi vì bạn đã đề cập nó trong kết nối với Externalizable. Btw, tôi đọc bài viết của bạn. Tốt nhất. Tôi đã hỏi một câu hỏi ở đó. Nó sẽ tuyệt vời nếu bạn có thể pl. Đáp lại. – shrini1000