2011-01-18 30 views
7

Tại thời điểm này, có hai proto buf thư viện cho NET:khác biệt trong .NET Nghị định thư Buffer thư viện

http://code.google.com/p/protobuf-csharp-port/ Với Jon Skeet là chủ sở hữu http://code.google.com/p/protobuf-net/ với Marc Gravell là chủ sở hữu

là gì sự khác biệt giữa hai? Cả hai được mã hóa với cùng một thông số như thông số kỹ thuật của Google? Có sự khác biệt nào không? Lý do tôi yêu cầu là hiện tại chúng tôi có tương tác proto buf giữa các dịch vụ sử dụng Java và các thư viện có khả năng C++ và muốn đảm bảo chúng tôi tránh bất kỳ vấn đề hoặc trường hợp cạnh nào.

Trả lời

11

Phiên bản của Jon phần lớn là một cổng của phiên bản Java, vì vậy có một API và phương pháp tiếp cận thiết kế rất giống nhau. Nó cũng là AFAIK hoàn toàn hợp đồng trước, tức là từ .proto.

phiên bản của tôi đi kèm với nó nhiều hơn từ góc độ NET, nhìn vào những gì là phổ biến trong serializers NET - đối tượng để có thể thay đổi, trang bị thêm các loại hiện có, mã đầu tiên (mặc dù nó có thể vẫn làm mã gen từ a .proto nếu bạn muốn), vv Nó thậm chí có thể suy ra dữ liệu từ các thuộc tính được sử dụng bởi XmlSerializerDataContractSerializer để làm việc song song với mã hiện có và có thể cắm vào cả từ xa (qua ISerializable) và WCF (thông qua thuộc tính hoặc cấu hình). Vì vậy, nó bắt nguồn từ sâu trong hệ sinh thái .NET. Tôi cũng bao gồm sự hỗ trợ thừa kế (vì quá phổ biến trong các trình tuần tự .NET khác), nhưng điều này hơi khó để ánh xạ tới các nền tảng khác vì nó không có đại diện trực tiếp trong .proto.

Dữ liệu nhị phân phải giống nhau; đó chủ yếu là điểm của định dạng, p Phần lớn là một lựa chọn trong đó API có thể phù hợp hơn với bạn.

Đối với nhu cầu của bạn, làm việc song song với C++ và mã Java trong cùng một hệ thống và với các định nghĩa hiện có .proto, tôi đề xuất phiên bản của Jon có thể là lựa chọn phù hợp nhất cho bạn.

Tuy nhiên, nếu bạn đang làm NET chỉ, hoặc đang làm NET với interop với bên ngoài mã (tức là bạn không quan tâm những gì ngôn ngữ "khác bên" sử dụng, vì bạn chỉ phải lo lắng về mã của riêng bạn), sau đó IMO protobuf-net có thể là một cách khá đau miễn phí để tiêu thụ dữ liệu; đặc biệt là nếu bạn có một hệ thống hiện tại mà bây giờ bạn tìm thấy bạn muốn serialize (hoặc: serialize nhanh hơn/nhỏ hơn).

+1

Cảm ơn Marc. Chúng tôi đã sử dụng phiên bản của bạn từ ngày 1, nhưng đã tìm kiếm một số làm rõ đặc biệt là khi nhiều nhóm bắt đầu sử dụng thư viện. –

+0

@Ray rồi tiếp tục sử dụng và tận hưởng; p –