2011-07-07 30 views
5

Tôi đã tự hỏi nếu định dạng dữ liệu serialized vùng đệm giao thức của vẫn không đổi qua trình biên dịch protobuf và thư viện khách hàng phiên bản.dữ liệu định dạng tương thích giữa các phiên bản protobuf

Nói cách khác, tôi có cần phải sử dụng cùng một phiên bản trình biên dịch để tạo ra các lớp học của tôi Python, Java, và C++? Và các khách hàng này có cần sử dụng cùng một phiên bản của các thư viện protobuf không?

This post loại địa chỉ câu hỏi của tôi, nhưng câu trả lời chấp nhận của nó là cụ thể cho phiên bản protobuf của OP.

Trả lời

3

Vâng, đó là khá nhiều ý tưởng. Nó không quan trọng bạn sử dụng thư viện nào, miễn là nó tuân theo spec. Lưu ý rằng cùng một dữ liệu thể được biểu diễn theo những cách hơi khác nhau, cho đơn đặt hàng lĩnh vực ví dụ không nên quan trọng đối với khách hàng, và trong khi nó là chung cho khách hàng để viết các lĩnh vực theo thứ tự tăng dần, nó là cần thiết một cách rõ ràng của khách hàng để xử lý các trường theo thứ tự bất kỳ. Tất cả những gì tôi nói ở đây là nó có thể không phải là chính xác cùng một byte theo cùng một thứ tự, nhưng nó sẽ hoạt động tốt từ bất kỳ khách hàng nào.

Lưu ý rằng một số triển khai có thể cung cấp các tính năng bổ sung (* ho * như tôi cung cấp hỗ trợ kế thừa), nhằm mục đích sử dụng chủ yếu chỉ trong một khách hàng đó. Trong trường hợp đó, tôi sẽ: hy vọng các tính năng đó sẽ hiển nhiên khi được sử dụng và b: luôn luôn vẫn tạo luồng protobuf hợp lệ (bạn có thể chỉ cần bỏ qua các trường đó hoặc hỗ trợ chúng dưới dạng bytes cho mục đích khứ hồi).

+0

nếu không phải là "chính xác các byte cùng theo thứ tự" của mình, nhiều khách hàng sẽ phá vỡ. bất cứ ai dựa vào chữ ký băm và mật mã. – jaybny

Các vấn đề liên quan