gpt4 book ai didi

json - json 的紧凑二进制表示

转载 作者:行者123 更新时间:2023-12-03 00:57:58 26 4
gpt4 key购买 nike

是否有任何紧凑的 JSON 二进制表示形式?我知道有BSON ,但即使该网页也说“在许多情况下并不比 JSON 更有效。在某些情况下,BSON 甚至比 JSON 使用更多的空间”。

我正在寻找一种尽可能紧凑的格式,最好是某种开放标准?

最佳答案

您可以查看Universal Binary JSON specification 。它不会像 Smile 那样紧凑,因为它不进行名称引用,但它与 JSON 100% 兼容(其中 BSON 和 BJSON 定义了 JSON 中不存在的数据结构,因此没有标准转换为/来自)。

它的标准格式也(故意)非常简单地读写:

[type, 1-byte char]([length, 4-byte int32])([data])

简单的数据类型以 ASCII 标记代码开头,例如“I”表示 32 位 int、“T”表示 true、“Z”表示 null、“S”表示字符串等等。

该格式经过设计,旨在快速读取,因为所有数据结构都以其大小为前缀,因此不会扫描空终止序列。

例如,读取一个可能像这样划分的字符串([]-字符仅用于说明目的,它们不是按格式编写的)

[S][512][this is a really long 512-byte UTF-8 string....]

你会看到“S”,打开它来处理字符串,看到它后面的 4 字节整数“512”,并且知道你可以在一个 block 中抓取接下来的 512 字节并将它们解码回来到一个字符串。

类似地,数值在没有长度值的情况下写出,以便更加紧凑,因为它们的类型(byte、int32、int64、double)都定义了它们的字节长度(分别为 1、4、8 和 8。还支持任意长的数字,即使在不支持它们的平台上也非常便携)。

平均而言,您应该会看到一个平衡良好的 JSON 对象(大量混合类型)的大小减少了大约 30%。如果您想确切地了解某些结构如何压缩或不压缩,您可以检查 Size Requirements部分以获得想法。

好的一面是,无论压缩如何,数据都将以更优化的格式写入,并且处理速度更快。

我检查了核心Input/OutputStream implementations今天将格式读/写到 GitHub 中。我将在本周晚些时候检查一般基于反射的对象映射。

你可以看一下这两个类,看看如何读写格式,我认为核心逻辑大概是20行代码。由于方法的抽象以及围绕检查标记字节以确保数据文件是有效格式的一些结构,这些类更长;诸如此类的事情。

如果您有非常具体的问题,例如规范的字节顺序(大)或 double 的数字格式(IEEE 754),所有这些都包含在规范文档中,或者直接问我。

希望有帮助!

关于json - json 的紧凑二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com