【问题标题】:When JSON is send over network how are numbers represented (as binary or text)?当 JSON 通过网络发送时,数字如何表示(二进制或文本)?
【发布时间】:2019-03-17 00:50:55
【问题描述】:

这可能是一个微不足道的问题……也可能不是。当我将一个对象序列化为 JSON 时,数字是如何表示的?

具体来说,我需要知道将它们编码为二进制的效率如何。有两种方式:

  1. 将数字转换为其十进制字符串表示,然后将该字符串编码为二进制。
  2. 或将数字直接编码为二进制。

是什么情况?

这是一个很大的区别:假设序列化对象包含数字12345678。第一种编码方式需要 8B 传输,第二种编码方式仅需要 4B。当涉及大量大数字(我的情况)时,我最好使用 base64 作为序列化的预处理。

我可以想象这可能取决于序列化程序(尽管我真的希望不是这样)。在这种情况下,我使用的是 Firebase 实时数据库 SDK。

【问题讨论】:

  • 作为文本。 JSON 是一个字符串。
  • 如果您特别关心它占用多少空间,请使用 Gzip 在传输过程中压缩您的 JSON。下载时浏览器会自动解压。
  • @bhspencer 不能。此传输由 Firebase 管理(在我端使用他们的 SDK,在他们端使用他们的服务器)...
  • 带宽实际上是一个实际问题吗?如果没有,那么请停止担心。以我的经验,JSON 在所有语言中的灵活性和普遍采用远远超过了带宽的增加。

标签: json firebase serialization firebase-realtime-database encoding


【解决方案1】:

JSON 是一种文本 表示法。所以数字12345678 被发送为这八个字符,1、2、3 等。根据您的文本编码,这可能是八个字节(例如,UTF-8 或 Windows-1252;但如果您使用的是 UTF-16 ,例如,它将是 16 个字节)。

多年来有各种“二进制 JSON”提案,但我认为它们中的任何一个都没有真正流行于特定应用程序之外(例如,MongoDB 中的BSON)。

【讨论】:

  • 这就是我所担心的......你在这里有相当的声誉,所以我认为它是理所当然的,但它仍然非常无效。
  • @Rasto - 抱歉,不太清楚你的意思。 :-)(和 FWIW,很大程度上忽略代表。信任是好的,但也一定要验证你在这里得到的任何答案,无论是来自 ~700k 用户还是 ~700 用户。:-))
猜你喜欢
  • 2018-03-31
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
相关资源
最近更新 更多