2009-04-01 30 views
13

Tôi có một số lớp có thể tuần tự được biên dịch mà không chỉ định một serialVersionUID. Bây giờ tôi cần thêm một số thành viên dữ liệu vào các lớp này nhưng muốn bảo tồn một số đối tượng đã được tuần tự hóa.Làm thế nào tôi có thể tìm ra serialVersionUID của một đối tượng Java được tuần tự hóa?

Có cách nào để tìm ra serialVersionUID của các đối tượng được tuần tự hóa này để tôi có thể chỉ định cùng một ID trong mã nguồn không?

Trả lời

13

Nếu bạn chưa sửa đổi mã, bạn có thể chạy công cụ nối tiếp (một phần của JDK) và xem nó tạo ra cái gì. Tôi tin rằng sẽ giúp bạn có được những gì tính toán seriVersionUID là.

Here is a brief article on serialver.

+2

Đảm bảo bạn thực hiện điều này với cùng một JVM chính xác mà bạn đã sử dụng để biên dịch mã ban đầu! – Eddie

+1

Điều này cũng sẽ hoạt động trên một JVM khác nhau, bởi vì nếu không thì các tệp lớp và các đối tượng được tuần tự hóa sẽ không được di chuyển trên các JVM (mà chúng là). – Thilo

+4

Thông số tuần tự hóa đối tượng Java, phần 4.6, giải thích cách serialVersionUID có thể không tương thích trên các JVM trong trường hợp các lớp bên trong, do việc triển khai tạo các tên khác nhau cho các thành viên tổng hợp. Tôi đã thấy điều này xảy ra trong thực tế, ngay cả với hai Sun JVM. – Martin

3

Nếu bạn đang sử dụng Eclipse, nó có một "sửa chữa nhanh chóng" để tạo ra serialVersionUID tính. Điều này tất nhiên chỉ hoạt động nếu bạn có (chính xác) nguồn cho các lớp học tại thời điểm các đối tượng đã được đăng.

Nếu bạn có ít nhất tệp lớp cho chúng, hãy sử dụng công cụ dòng lệnh "nối tiếp" (đi kèm với JDK).

6

Những gì tôi thường làm là, tôi biên dịch mã, thử chạy nó và ngoại lệ được nêu đề cập đến SVUID vi phạm, vì vậy tôi có thể cắt và dán mã đó vào mã của riêng tôi. Thô, nhưng nó hoạt động.

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