sách gpt4 ai đã đi

Cơ chế tuần tự hóa Java

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-29 22:32:09 31 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Bài đăng trên blog CFSDN Java Serialization Mechanism này được tác giả thu thập và sắp xếp. Nếu bạn quan tâm đến bài viết này, vui lòng thích nó.

  Trong Java, mọi thứ đều là đối tượng. Trong môi trường phân tán, đối tượng thường cần được chuyển từ đầu này của mạng hoặc thiết bị sang đầu kia. Điều này đòi hỏi một giao thức có thể truyền dữ liệu ở cả hai đầu. Cơ chế tuần tự hóa Java được tạo ra để giải quyết vấn đề này.

Sau khi chuyển đổi trạng thái đối tượng thành luồng byte, bạn có thể sử dụng nhiều lớp luồng byte khác nhau trong gói java.io để lưu luồng này vào tệp, chuyển luồng này sang luồng khác hoặc gửi dữ liệu đối tượng đến máy chủ khác thông qua kết nối mạng. Hàm tuần tự hóa đối tượng rất đơn giản và mạnh mẽ, được sử dụng trong RMI, Socket, JMS và EJB. Tuần tự hóa đối tượng không phải là chủ đề cốt lõi nhất trong lập trình mạng, nhưng nó khá quan trọng và có nhiều ý nghĩa thực tế.

Việc tuần tự hóa đối tượng Java không chỉ bảo toàn dữ liệu của một đối tượng mà còn bảo toàn đệ quy dữ liệu của từng đối tượng được đối tượng đó tham chiếu. Toàn bộ hệ thống phân cấp đối tượng có thể được ghi vào luồng byte, có thể được lưu trong tệp hoặc truyền qua kết nối mạng. Có thể sử dụng tuần tự hóa đối tượng để thực hiện "sao chép sâu" một đối tượng, nghĩa là sao chép chính đối tượng đó và đối tượng được tham chiếu. Việc tuần tự hóa một đối tượng có thể dẫn đến việc tuần tự hóa toàn bộ đối tượng đó.

Cách sử dụng cơ bản: .

      Tuần tự hóa đề cập đến việc lưu trữ các lớp hoặc kiểu dữ liệu cơ bản vào các luồng dữ liệu, bao gồm tệp, luồng byte và luồng dữ liệu mạng.

Quá trình tuần tự hóa trong JAVA chủ yếu dựa vào hai lớp: ObjectOuputStream và ObjectInputStream. Chúng là lớp con của OutputStream và InputStream trong hệ thống JAVA IO. Vì chúng là luồng trong JAVA IO nên có thể vận hành như các luồng thông thường. Sau đây là cách họ sử dụng nó:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
nhập khẩu java.io.ByteArrayInputStream;
nhập khẩu java.io.ByteArrayOutputStream;
nhập khẩu java.io.IOException;
nhập khẩu java.io.ObjectInputStream;
nhập khẩu java.io.ObjectOutputStream;
nhập khẩu java.io.Serializable;
 
công cộng lớp học Đôi thực hiện Có thể tuần tự hóa
 
  riêng tư tĩnh cuối cùng dài serialVersionUID = -1874850715617681161L;
  riêng tư số nguyên kiểu;
  riêng tư Tên chuỗi;
 
  công cộng số nguyên lấy Kiểu() {
  trở lại kiểu;
  }
 
  công cộng vô hiệu đặtKiểu( số nguyên kiểu) {
  cái này .type = kiểu;
  }
 
  công cộng Chuỗi getName() {
  trở lại tên;
  }
 
  công cộng vô hiệu setName(Tên chuỗi) {
  cái này .name = tên;
  }
 
 
  công cộng Đôi( số nguyên loại, Tên chuỗi) {
  siêu ();
  cái này .type = kiểu;
  cái này .name = tên;
  }
 
  công cộng tĩnh vô hiệu main(String[] args) ném Ngoại lệ IO, Ngoại lệ không tìm thấy lớp {
  // TODO Phương thức tự động tạo stub
  //tuần tự hóa cặp đối tượng
  ByteArrayOutputStream bos = mới Dòng đầu ra ByteArray();
  Dòng đối tượng đầu ra oos = mới ObjectOutputStream(bos);
  Cặp đôi = mới Đôi( 1 , "Charlie" );
  oos.writeObject(cặp);
  //giải tuần tự hóa đối tượng, lấy đối tượng mới newpair
  ByteArrayInputStream bis = mới Dòng đầu vào ByteArray(bos.toByteArray());
  ObjectInputStream ois = mới Dòng đầu vào đối tượng(bis);
  Cặp newpair = (Cặp) ois.readObject();
 
  Hệ thống.out.println(newpair.getType()+ ":" +newpair.getName());
  }
}

1. Cả hai lớp này đều ở chế độ trang trí. Khi tạo chúng, một luồng dựa trên byte phải được truyền vào. Các luồng này thực sự lưu trữ dữ liệu được tuần tự hóa.

 2. Lớp được lưu trữ phải triển khai giao diện Serializable, giao diện này không có bất kỳ hàm nào và chỉ là một giao diện đánh dấu. Nếu quá trình tuần tự hóa được thực hiện trên một máy và dữ liệu kết quả được chuyển sang máy khác để hủy tuần tự hóa, các lớp trên hai máy phải hoàn toàn giống nhau, nếu không quá trình tuần tự hóa sẽ không thành công.

 3. Nhớ không sử dụng toString để lấy một String từ bos trong đoạn mã trên, sau đó lấy một ByteArrayInputStream từ String rồi hủy tuần tự hóa nó. BOS được lưu trữ theo byte và việc chuyển đổi nó thành String được lưu trữ theo ký tự chắc chắn sẽ gây ra những thay đổi dữ liệu và byte[] lấy được từ String sẽ không giống với byte[] như trước. Tôi gặp phải vấn đề này vì tôi muốn lưu trữ dữ liệu được tuần tự hóa trong tệp XML.

Máy ảo Java thực hiện chức năng gì trong quá trình tuần tự hóa và hủy tuần tự hóa?

Javadoc mô tả chi tiết cơ chế tuần tự hóa Java trong phần mô tả hai lớp này:

Trích dẫn.

Cơ chế tuần tự hóa mặc định cho một đối tượng ghi lớp của đối tượng, chữ ký lớp và các giá trị của tất cả các trường không tạm thời và không tĩnh. Các tham chiếu đến các đối tượng khác (trừ các trường tạm thời hoặc tĩnh) cũng khiến các đối tượng đó được ghi. Nhiều tham chiếu đến một đối tượng duy nhất được mã hóa bằng cơ chế chia sẻ tham chiếu để đồ thị của các đối tượng có thể được khôi phục về cùng hình dạng như khi bản gốc được ghi.

Cơ chế tuần tự hóa mặc định ghi dữ liệu sau vào luồng:

1. Lớp mà đối tượng thuộc về 2. Chữ ký của lớp 3. Tất cả các thuộc tính không tạm thời và không tĩnh 4. Tham chiếu đến các đối tượng khác cũng sẽ gây ra sự tuần tự hóa của các đối tượng này 5. Nếu nhiều tham chiếu trỏ đến một đối tượng, cơ chế tham chiếu chia sẻ sẽ được sử dụng.

Trích dẫn.

Các lớp yêu cầu xử lý đặc biệt trong quá trình tuần tự hóa và hủy tuần tự hóa phải triển khai các phương thức đặc biệt với các chữ ký chính xác này

?
1
2
3
4
5
6
riêng tư vô hiệu readObject(luồng java.io.ObjectInputStream)
  ném Ngoại lệ IO, Ngoại lệ không tìm thấy lớp;
riêng tư vô hiệu writeObject(luồng java.io.ObjectOutputStream)
  ném Ngoại lệ IO
riêng tư vô hiệu đọcObjectNoData()
  ném Ngoại lệ ObjectStream;

  .

Cuối cùng, bài viết này về cơ chế tuần tự hóa Java kết thúc tại đây. Nếu bạn muốn biết thêm về cơ chế tuần tự hóa Java, vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

31 4 0
qq735679552
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com