2010-08-24 76 views
9

Vì vậy, BSON là JSON serialized phải không?Tại sao nó được gọi là BSON?

{"hello": "world"}"\x16\x00\x00\x00\x02hello\x00 \x06\x00\x00\x00world\x00\x00"

Nhưng tại sao lại gọi là Binary Json? Nhị phân là gì?

Tôi luôn có xu hướng liên kết nhị phân với 10101010101. Nhưng định dạng tuần tự BSON ở trên không ở dạng 101010101010.

Có thể ai đó giải thích cho tôi ý nghĩa của nhị phân ở đây vì vậy tôi hiểu tại sao nó được gọi là JSON nhị phân?

+3

'10101010101' là số trong dữ liệu cơ sở 2 (nhị phân), không nhất thiết là nhị phân". –

Trả lời

20

Mã nhị phân không giống với văn bản. Trong khi JSON là văn bản có thể đọc được, BSON là dữ liệu nhị phân (chỉ là các byte). Bạn có thể ghi nó ra là 1001010 v.v., nhưng nó thường phổ biến hơn để hiển thị từng byte tại một thời điểm (vì vậy \ x16 chỉ là hex 16, tức là byte thập phân 22). Về cơ bản "nhị phân" ở đây được sử dụng để so sánh nó với dữ liệu văn bản, không phải để nói rằng nó thực sự là cơ sở 2 nói riêng.

Điều này có nghĩa là bạn chỉ có thể sử dụng BSON trong các tình huống mà bạn có thể truyền dữ liệu nhị phân tùy ý. Ví dụ, nếu bạn muốn nhúng BSON vào một tài liệu XML (vì bất kỳ lý do gì!), Bạn phải base64 mã hóa nó trước tiên, bởi vì XML là một biểu diễn dựa trên văn bản.

4

Nhị phân thực sự là một từ sai, vì mọi thứ trên máy tính của bạn là "nhị phân" ở một mức độ nào đó. Nhị phân, khi nói đến các định dạng tệp hoặc luồng mạng, có nghĩa là không dễ dàng-người-dễ hiểu. Nó cũng có xu hướng nhỏ gọn.

Ví dụ về các văn bản hoặc "con người có thể đọc được" (con người có thể hiểu được) tập tin và dòng định dạng:

Ví dụ về "nhị phân "định dạng tệp và luồng:

Điều của hầu hết các lưu ý ở đây là các định dạng có thể hiểu con người cần ít hơn rất nhiều lời giải thích nếu bạn chỉ đơn giản là phá vỡ chúng mở và bắt đầu đọc. Định dạng tệp nhị phân có thể cần toàn bộ sách để giải thích :)

Định dạng không nhất thiết là hoàn toàn "nhị phân" hoặc hoàn toàn là dễ hiểu. Ví dụ, bạn có thể hiểu một loạt các số có chữ số đơn không có dấu cách, đại diện cho một mảng các số có một chữ số. Bạn có thể không hiểu được một loạt 48 số (không có khoảng trống), đại diện cho các giá trị x, y và z cho 16 đỉnh 3d, mặc dù bạn có thể "đọc" chúng. Ngoài ra, còn có ví dụ về dữ liệu "nhị phân" được mã hóa của Skeet, đặc biệt nếu dữ liệu được nhúng theo định dạng dễ hiểu hơn.

1

Lý do nó được gọi là 'nhị phân' đã được giải thích: về cơ bản, nó không phải là văn bản, do đó unix-phong cách phân biệt (nhị phân vs tập tin văn bản).

Nhưng phần JSON cũng lạ, vì BSON KHÔNG phải là JSON - nó không phải là tập hợp con cũng như phần phụ. Nó có nhiều kiểu dữ liệu hơn, vì vậy nó là loại superset; nhưng nó cũng không hỗ trợ tất cả JSON hợp pháp vì giới hạn về những thứ như tên thuộc tính và giới hạn độ dài giá trị chuỗi.

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