Tuần tự hóa là gì?


149

Tôi đang bắt đầu với Lập trình hướng đối tượng (OOP) và muốn biết: ý nghĩa của việc xê-ri hóa theo cách nói của OOP là gì?


Ngoài ra hãy xem bài viết này giải thích lý do tại sao không sử dụng
serialep

4
Bài viết đó là hoàn thành BS, do đó đánh giá của nó.
RedAces

Đây không phải là loại câu hỏi quá rộng thường bị xóa, bởi vì một tìm kiếm trên Google sẽ đưa ra câu trả lời ngay lập tức?
arvymet

2
@arvymet bạn đã đúng. Đây là kết quả đầu tiên khi tôi googled :) Và đó chính xác là những gì tôi đang tìm kiếm
R_G

Câu trả lời:


143

Tuần tự hóa là quá trình biến một đối tượng trong bộ nhớ thành một luồng byte để bạn có thể thực hiện các công việc như lưu trữ nó trên đĩa hoặc gửi qua mạng.

Deserialization là quá trình ngược lại: biến một luồng byte thành một đối tượng trong bộ nhớ.


46
Ngoài ra, các động từ MarshalUnmarshalđồng nghĩa với SerializeDeserialize.
wulfgarpro

4
Không phải là một đối tượng trong bộ nhớ đã được biểu diễn dưới dạng byte ở mức thấp nhất sao?
mahacoder

3
Một đối tượng trong bộ nhớ sẽ được định dạng bởi trình biên dịch, HĐH và / hoặc phần cứng. Thay đổi trình biên dịch của bạn và bạn thay đổi định dạng của bạn. Một đối tượng được tuần tự hóa sẽ có định dạng được xác định bởi mã của bạn, vì vậy bạn có thể đảm bảo định dạng. Điều này cũng hữu ích khi gửi các đối tượng qua mạng - máy nhận có thể có kiến ​​trúc hoàn toàn khác (và do đó biểu diễn trong bộ nhớ).
Andrew Barnett

1
Vì vậy, nó biến nó thành một chuỗi?
NoName

1
Một chuỗi có thể là một định dạng hợp lệ, nhưng nó không phải là một chuỗi. Bản thân các chuỗi có các định dạng khác nhau (ASCII, UTF8, UTF16, EBCDIC ...) và thực sự thể hiện khái niệm này khá tốt. Chuỗi (một đối tượng trong bộ nhớ) abcsẽ được tuần tự hóa thành 0x61 0x62 0x63(ASCII) hoặc 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) - có hoặc không có những thứ như đầu cuối NUL hoặc độ dài được mã hóa.
Andrew Barnett

91

Nói một cách đơn giản, Tuần tự hóa là một quá trình chuyển đổi một đối tượng thành luồng byte để nó có thể được truyền qua mạng hoặc được lưu trữ trong một bộ lưu trữ liên tục.

Deserialization hoàn toàn ngược lại - Lấy một luồng byte từ mạng hoặc bộ lưu trữ bền vững và chuyển đổi nó trở lại Object với cùng trạng thái .

Điều cần hiểu là làm thế nào các luồng byte đó được diễn giải hoặc thao tác để chúng ta có được cùng một đối tượng / cùng một trạng thái. Có nhiều cách khác nhau để đạt được điều đó. Một số trong số họ là -

  1. XML : Chuyển đổi Object thành XML, chuyển nó qua mạng hoặc lưu trữ nó trong một tệp / db. Lấy nó và chuyển đổi nó trở lại đối tượng với trạng thái tương tự. Trong Java, chúng tôi sử dụng thư viện JAXB (kiến trúc Java để liên kết XML) (Từ java 6, nó đi kèm với JDK).
  2. JSON : Tương tự có thể được thực hiện bằng cách chuyển đổi Object thành JSON (ký hiệu đối tượng JavaScript). Một lần nữa có thư viện GSON có thể được sử dụng cho việc này.
  3. Hoặc chúng ta có thể sử dụng Tuần tự hóa được cung cấp bởi chính ngôn ngữ OOP. Ví dụ, trong Java, bạn có thể tuần tự hóa một Object mà tôi thực hiện Serializable interfacevà ghi vào Object Stream.

@AniketThakur Một lời giải thích rất hay, bạn cũng có thể cung cấp một liên kết để tôi tìm hiểu JSONtừ đầu, vì tôi không biết gì về nó
Kasun Siyambalapitiya

Bất cứ khi nào chúng ta nói về tuần tự hóa tại sao chúng ta luôn chỉ đề cập đến Object. Chúng tôi không thể sử dụng tuần tự hóa trong Ngôn ngữ chức năng nơi chúng tôi không có bất kỳ đối tượng nào hơn là chúng tôi đang sử dụng các tệp để truyền qua mạng.
Pardeep Sharma

1
Trước hết, tại sao chúng ta cần chuyển đổi một đối tượng thành luồng byte và ngược lại? Tại sao đó không phải là một hoạt động ngầm cho người dùng đang cố gắng làm điều đó?
Aparna Chaganti

1
Nếu chúng ta có thể sử dụng JSON hoặc XML thì tại sao chúng ta cần hoặc nói rằng chuyển đổi chúng thành byte luồng? Và sau đó chúng tôi chỉ lưu trữ chúng vào JSOn hoặc XML thay vì chuyển đổi chúng thành byte.
Muhammad Faizan Giá vé

78

Giải thích đơn giản qua hình ảnh:

Rex, con chó của tôi, được nối tiếp!

Giải thích bằng cách tương tự:

Giả sử tôi đang nói chuyện với bạn thân của tôi qua điện thoại và tôi đang kể cho anh ấy nghe về chú chó con mới của tôi.

Đây là vấn đề của tôi: chó con là một động vật có vú sống và thở. Làm thế nào tôi có nghĩa là để truyền đạt một con chó con qua đường dây điện thoại? Tôi không thể đặt con chó con của tôi vào máy thu điện thoại của tôi.

Vì vậy, thay vào đó, tôi sẽ phải truyền đạt một đại diện của con chó con qua điện thoại. Nói cách khác, sau đó tôi nối tiếp chú chó Rex của mình và tôi gửi cho nó phiên bản nối tiếp của Rex qua đường dây điện thoại:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

Đó là một đại diện hoàn hảo - một loạt các con chó của tôi.

Tóm lược:

Tuần tự hóa về cơ bản có nghĩa là biến con chó Rex của tôi thành một thứ khác - một đối tượng JSON - sau đó có thể được vận chuyển qua đường dây điện thoại dưới dạng một chuỗi 1 và 0. Bạn thân của tôi ở NYC sau đó có thể dịch lại các số 1 và 0 đó thành một đối tượng JSON - để anh ta có một đại diện hoàn hảo cho chú chó Rex của tôi.


16

Kiểm tra này, điều này sẽ cung cấp cho bạn một lời giải thích tốt:

http://en.wikipedia.org/wiki/Serialization

Tôi nghĩ rằng việc sử dụng phổ biến nhất của thuật ngữ tuần tự hóa phải thực hiện với việc chuyển đổi một đối tượng nhị phân thành biểu diễn XML (hoặc chuỗi khác) để nó có thể được lưu trữ trong cơ sở dữ liệu / tệp hoặc gửi qua mạng trong một cuộc gọi dịch vụ web. Deserialization là quá trình ngược lại - chuyển đổi một chuỗi XML / trở lại thành một đối tượng.

EDIT: Một thuật ngữ khác bạn có thể gặp là marshalling / unmarshalling. Marshalling về cơ bản là khái niệm tương tự như tuần tự hóa, và không sắp xếp lại cũng giống như khử lưu huỳnh.


3
Không nhất thiết chỉ là XML, nó có thể là bất kỳ đại diện nào, thậm chí là đại diện nhị phân
Matthew Farwell

7

Tuần tự hóa là quá trình chuyển đổi một đối tượng thành một luồng byte để lưu trữ đối tượng hoặc truyền nó vào bộ nhớ, cơ sở dữ liệu hoặc tệp. Mục đích chính của nó là lưu trạng thái của một đối tượng để có thể tạo lại nó khi cần thiết. Quá trình ngược lại được gọi là khử lưu huỳnh.

...

Hình minh họa này cho thấy toàn bộ quá trình tuần tự hóa

Toàn bộ quá trình tuần tự hóa

...

Thông qua việc tuần tự hóa, nhà phát triển có thể thực hiện các hành động như gửi đối tượng đến ứng dụng từ xa bằng Dịch vụ web, chuyển một đối tượng từ miền này sang miền khác, truyền đối tượng qua tường lửa dưới dạng chuỗi XML hoặc duy trì bảo mật hoặc cụ thể của người dùng thông tin trên các ứng dụng

Từ https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/con accept / subsialization /

(nhấn mạnh của tôi)


5

Tuần tự hóa là quá trình chuyển đổi dữ liệu không có thứ tự (chẳng hạn như một đối tượng) thành một chuỗi các mã thông báo có thể được sử dụng sau này để xây dựng lại dữ liệu gốc. Các hình thức nối tiếp thường là một chuỗi văn bản, nhưng không phải.


2

tuần tự hóa đang chuyển đổi một đối tượng thành chuỗi bit có thể lưu trữ.

để bạn có thể lưu chuỗi này vào một tệp, db hoặc gửi qua mạng.

sau đó bạn có thể giải tuần tự hóa nó cho đối tượng thực tế và sử dụng lại bất cứ khi nào bạn muốn.

Dịch vụ webAJAX là ví dụ phổ biến nhất về tuần tự hóa. Các đối tượng được tuần tự hóa trước khi gửi phản hồi cho khách hàng.


1

tuần tự hóa không là gì ngoài việc chuyển đối tượng được hỗ trợ java sang dạng được hỗ trợ

                         (OR)

chuyển đổi biểu mẫu được hỗ trợ java sang biểu mẫu được hỗ trợ mạng .. phạm vi chính của việc tuần tự hóa không gì khác ngoài việc chuyển dữ liệu từ lớp này sang lớp khác ... chỉ các đối tượng được tuần tự hóa mà chúng ta có thể gửi qua mạng ..


1

Tuần tự hóa là quá trình chuyển đổi một đối tượng được hỗ trợ Java, C # hoặc bất kỳ (ngôn ngữ OOP) nào khác sang dạng có thể vận chuyển. Bằng cách này, nó được vận chuyển qua mạng hoặc được lưu trữ trên đĩa. Để một lớp được tuần tự hóa, nó phải thực hiện giao diện tuần tự hóa.


không chỉ giới hạn ở Java hoặc C #, trong hầu hết ngôn ngữ lập trình chúng tôi sử dụng tuần tự hóa. Ví dụ, trong mô-đun dưa trăn được sử dụng cho cùng.
Pardeep Sharma

0

Tuần tự hóa đang biến dữ liệu thành một "chuỗi" byte tuyến tính.

Những người khác đã nói ít nhiều điều tương tự, nhưng tôi nhấn mạnh rằng các mô hình máy tính yêu cầu dữ liệu phù hợp với RAM một chiều được lưu trữ hoặc lưu trữ liên tục.

Hầu hết mọi thứ là "dữ liệu" vốn đã được tuần tự hóa (ngay cả khi bạn phải giảm mô hình trừu tượng thành mô hình tuyến tính); không tuần tự hóa là một kết nối mạng hoặc một máy dựa trên trạng thái phức tạp như trình phân tích cú pháp.


0

tuần tự hóa phải thực hiện với việc chuyển đổi một đối tượng nhị phân thành biểu diễn XML (hoặc chuỗi khác) để nó có thể được lưu trữ trong cơ sở dữ liệu / tệp hoặc được gửi qua mạng trong một cuộc gọi dịch vụ web. Deserialization là quá trình ngược lại - chuyển đổi một chuỗi XML / trở lại thành một đối tượng.


0

Khi khởi tạo (xây dựng) đối tượng thực tế (vật) từ một lớp (bản thiết kế), cần phải lưu đối tượng (vật) bằng cách tuần tự hóa nó (phá vỡ cấu trúc nguyên tử cơ bản của nó) vào một khoảng trống trong bộ nhớ. (Kiểu như Star Treks Transporter). Bạn chia nhỏ thứ đó thành luồng thông tin có thể được vận chuyển đi đâu đó và được lưu trữ. Sau đó, khi bạn muốn xây dựng lại thứ bạn chỉ cần kéo đối tượng được lưu trữ nguyên tử trở lại vào đối tượng. Khác với sự xúi giục.


0

Tuần tự hóa là quá trình chuyển đổi một đối tượng thành luồng dữ liệu nhị phân để nó có thể được lưu trữ trong một tệp hoặc gửi qua mạng nơi nó có thể được phục hồi trở lại cùng một đối tượng.

Tài liệu này sẽ giúp bạn hiểu chi tiết về tuần tự hóa Java.


-1

Tuần tự hóa là khi đối tượng (một đoạn bộ nhớ) được dịch ở dạng khi trạng thái của đối tượng có thể được lưu trong tệp (làm ví dụ).

Chỉ cần coi nó là làm bánh - đối tượng là bột, cookie - là bột nhào.

Vì vậy, bằng cách "tuần tự hóa", bạn có thể gửi cookie cho bạn bè của mình.

Một cái gì đó như thế :-)


4
... ngoại trừ cookie không thể biến trở lại thành bột nhão (khử lưu huỳnh).
Dave Sherohman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.