Trả lời

13

Cụ thể cho .NET, Nếu bạn có hai ứng dụng đang sử dụng cùng một hệ thống kiểu, thì bạn có thể sử dụng tuần tự nhị phân. Mặt khác, nếu bạn có các ứng dụng nằm trong các nền tảng khác nhau thì bạn nên sử dụng XML Serialization. Vì vậy, nếu tôi đang viết một ứng dụng chat (máy khách và máy chủ), tôi có thể sử dụng serialization nhị phân, nhưng nếu sau này tôi quyết định rằng tôi nên sử dụng Python để viết một khách hàng, sau đó tôi có thể không.

+0

Nếu bạn bao gồm Bộ nối tiếp hợp đồng dữ liệu khi bạn nói "xml serialization", thì tôi đồng ý với bạn. –

+0

Cảm ơn bạn rất nhiều vì đã trả lời – Mahantesh

+6

@Mahantesh @Adeel - "nhị phân" không phải là vấn đề ở đây; Nó không ** đúng là nhị phân không tương thích được - chỉ đơn giản là: 'BinaryFormatter' (một * ví dụ cụ thể * của bộ nối tiếp nhị phân) là một sự lựa chọn kém. Có nhiều thứ khác. –

2

Nếu bạn muốn đầu ra nền tảng thân thiện với người dùng hoặc nền tảng chéo, hãy sử dụng XML. Ngoài ra, tuần tự hóa XML sử dụng các trường công cộng và các thuộc tính để tuần tự hóa và bạn có thể thay đổi/định dạng lại bằng cách sử dụng các thuộc tính và tuần tự hóa tùy chỉnh ở cấp lớp nếu bạn muốn. Bin.Ser. sử dụng các trường riêng để tuần tự hóa.

+0

Sigh; oh những huyền thoại cũ ... Để mâu thuẫn * cả hai * điểm; trong khi 'BinaryFormatter' thực sự là một serializer trường, nó không phải là ** serializer nhị phân duy nhất - hầu hết những thứ khác được xử lý tốt hơn - và tương tự,' DataContractSerializer' viết xml, và * trừ khi kiểu được chú thích một cách chính xác * hoạt động như một * field * serializer. –

+0

DataContractSerializer, WCF? Trong câu hỏi này không một lời nào về điều đó. – SeeSharp

+0

Tham chiếu của tôi có "xml serialization", không giống với 'XmlSerializer'. "xml serialization" chỉ đơn giản là một phân loại; 'XmlSerializer' là một ví dụ cụ thể về một API cho" xml serialization ". 'DataContractSerializer' ** cũng ** thực hiện" xml serialization ". –

34

Cả hai câu trả lời hiện có đều tập trung vào "nền tảng chéo", nhưng đó là vấn đề không liên quan. Điểm mà họ đang làm ở đó là "không sử dụng BinaryFormatter nếu bạn đang thực hiện nhiều nền tảng" - điều mà tôi hoàn toàn ủng hộ. Tuy nhiên có một loạt các định dạng tuần tự nhị phân là rất nhiều đa nền tảng - protobuf/ASN.1 là các ví dụ chính.

Vì vậy, hãy xem xét thay vào những gì mà mỗi sản phẩm cung cấp;

  • Binary thường là nhỏ hơn, thường nhanh hơn để quá trình (ở cả hai đầu), và không dễ dàng human readable/chỉnh sửa
  • định dạng văn bản (xml/json) có xu hướng có nhiều tiết hơn nhị phân (mặc dù thường nén tốt), nhưng khá dễ làm việc bằng tay; nhưng tất cả những gì xử lý văn bản một bản đồ có xu hướng làm cho họ chậm
    • xml là rất phổ biến là dịch vụ web, và lợi ích từ gooling hỗ trợ như XSD, XSLT và xml mạnh biên tập
    • json là người chơi chính trong trình duyệt comms lương (mặc dù nó cũng được sử dụng trong dịch vụ web) - có xu hướng được ít trang trọng nhưng vẫn rất hiệu quả

Thông báo như thế nào khả năng tương tác không phải là một sức mạnh cũng không yếu kém của một trong hai, miễn là bạn chọn một định dạng nhị phân thích hợp!

Here's an answer so sánh thời gian tuần tự hóa, tuần tự hóa và chỉ số không gian của hầu hết các bộ nối tiếp .NET, để bạn tham khảo.

+0

Kinda tò mò, làm thế nào để bạn tìm thấy câu trả lời cũ của bạn? Chỉ cần hôm nay tôi đã cố gắng để theo dõi một trong những câu trả lời gần đây của tôi cho một số câu hỏi liên quan và tôi đã có một thời gian khó tìm kiếm nó. –

+0

@ H.B. thường qua google, [ví dụ] (http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=%2B%22ok+i'll+bite%22+%2Bgravell+site:stackoverflow.com) –