2010-11-26 27 views
6

Tài liệu iOS phân biệt giữa "tuần tự hóa" và "lưu trữ". Đây có phải là một sự khác biệt chung (tức là, nắm giữ trong các ngôn ngữ khác) hoặc là nó cụ thể cho Objective-C? Ngoài ra, sự khác biệt giữa hai điều này là gì?Serialization vs. Archiving?

+0

@skaffman, tôi chính xác không muốn iOS được gắn thẻ này để tôi có thể nhận được một số câu trả lời từ các ngôn ngữ khác. –

+0

GG skaffman. GG. – Mark

+1

Nó thậm chí không cụ thể cho iOS. NSKeyedArchiver cũng có sẵn trên Mac OS X. –

Trả lời

5

Đây là trường hợp một là một số khác (nhưng không phải tất cả) thời gian.

Wikipedia có này để nói về serialization:

"Tuần tự hóa là quá trình chuyển đổi một cấu trúc dữ liệu hoặc đối tượng vào một chuỗi các bit để nó có thể được lưu trữ trong một tập tin hoặc bộ nhớ đệm, hoặc truyền qua một liên kết kết nối mạng được "hồi sinh" sau trong cùng một môi trường máy tính khác "

Vì vậy, lưu trữ chỉ chỉ được tuần tự hóa, nhưng cũng có thể là sự kết hợp của việc tuần tự hóa và nén". Hoặc có lẽ nó thêm một số loại thông tin tiêu đề. Vì vậy, serialization là một hình thức lưu trữ, nhưng một kho lưu trữ không nhất thiết phải là một serialization.

Điều này không thực sự cụ thể đối với iOS - các thuật ngữ này được ném xung quanh tất cả. Tuy nhiên, ý nghĩa cụ thể của chúng trong bối cảnh iOS có thể khá cụ thể.

+0

Câu trả lời hay nhất +1. Tôi thực sự đã có tất cả ngược lại. –

1

Nói chung, việc tuần tự hóa có liên quan đến việc chuyển đổi các kiểu dữ liệu chương trình của bạn thành các luồng byte độc ​​lập kiến ​​trúc. Lưu trữ là serialization chuyên ngành trong đó bạn có thể lưu trữ loại và thông tin dựa trên mối quan hệ khác cho phép bạn unserialize/unmarshall dễ dàng. Vì vậy, lưu trữ có thể được coi là một chuyên môn và tập hợp con của Serialization. Đối với mục tiêu-C

Chuyển đổi tuần tự chuyển đổi Mục tiêu-C loại đến và từ luồng byte độc ​​lập kiến ​​trúc. Ngược lại với lưu trữ, số serial cơ bản không ghi lại dữ liệu loại giá trị cũng như các mối quan hệ giữa chúng; chỉ các giá trị mới được ghi lại. Đó là trách nhiệm của bạn về việc hủy kích hoạt dữ liệu theo thứ tự thích hợp. Tuy nhiên, một số lớp học tiện lợi làm cung cấp khả năng tuần tự hóa danh sách thuộc tính, ghi lại cấu trúc cùng với giá trị của chúng.

Với C++ đẩy mạnh serialization -

http://www.boost.org/doc/libs/1_45_0/libs/serialization/doc/index.html

Ở đây, chúng tôi sử dụng thuật ngữ "serialization" nghĩa giải cấu trúc đảo ngược của một bộ tùy ý của C++ dữ liệu cấu trúc để một chuỗi byte. Hệ thống như vậy có thể được sử dụng để hoàn nguyên cấu trúc tương đương trong ngữ cảnh chương trình khác. Tùy thuộc vào trên ngữ cảnh, điều này có thể được sử dụng triển khai đối tượng bền bỉ, thông số truy cập từ xa hoặc cơ sở khác. Trong hệ thống này, chúng tôi sử dụng thuật ngữ " " lưu trữ "để tham chiếu đến một dòng cụ thể của các byte byte này. Đây có thể là tệp dữ liệu nhị phân, dữ liệu văn bản, XML hoặc một số khác được tạo bởi người dùng của thư viện này.

+0

Cool +1. Điều này giúp tôi tách biệt. Tôi đang nắm giữ nhiều ví dụ hơn cho các ngôn ngữ khác. –

6

Tôi thực sự đang cố gắng tìm sự khác biệt của họ từ quan điểm của IOS. Thêm sau đây cho những người quan tâm:

Mục đích:
Archiving được sử dụng để đồ thị cửa hàng đối tượng. mô hình dữ liệu hoàn chỉnh có thể được lưu trữ và khôi phục dễ dàng. Cách các tệp Nib hoạt động có thể được coi là ví dụ để lưu trữ.

Nối tiếp được sử dụng để lưu trữ thứ bậc tùy ý của các đối tượng.
Các tệp công việc định dạng wat có thể được coi là ví dụ cho việc tuần tự hóa.

khác biệt (trích đoạn từ Archives lập trình hướng dẫn):
"Kho lưu trữ bảo tồn bản sắc của mọi đối tượng trong đồ thị dưới và tất cả các mối quan hệ nó có với tất cả các đối tượng khác trong đồ thị."
Mọi đối tượng được mã hóa trong ngữ cảnh của lời gọi rootObject được theo dõi. Nếu bộ mã hóa được yêu cầu mã hóa một đối tượng nhiều hơn một lần, trình mã hóa mã hóa tham chiếu đến mã hóa đầu tiên thay vì mã hóa đối tượng một lần nữa.

"Việc tuần tự hóa chỉ duy trì giá trị của các đối tượng và vị trí của chúng trong hệ thống phân cấp. Nhiều tham chiếu đến cùng một đối tượng giá trị có thể dẫn đến nhiều đối tượng khi được deserialized. Tính không thể thay đổi được."

khác biệt thực hiện:
Bất kỳ đối tượng mà thực hiện giao thức NSCoding có thể được lưu trữ ở đâu là Duy nhất trường hợp của NSArray, NSDictionary, NSString, NSDate, NSNumber, và NSData (và một số lớp con của họ) có thể được đăng. Nội dung của các đối tượng mảng và từ điển cũng chỉ chứa các đối tượng của các lớp này.

Khi nào thì sử dụng:
danh sách tài sản (serialization) nên được sử dụng cho dữ liệu bao gồm chủ yếu là các chuỗi và số. Chúng rất kém hiệu quả khi được sử dụng với các khối dữ liệu nhị phân lớn.
Việc lưu trữ các đối tượng không phải là các đối tượng plist hoặc lưu trữ các khối dữ liệu lớn là rất xứng đáng.