iphone - 在 iPhone 上使用 AMF 而不是 JSON? (对于网络服务)

标签 iphone apache-flex json actionscript amf

虽然 iPhone 本身支持 JSON,但 AMF 是一种二进制协议(protocol),它使用的带宽要少得多。您认为使用 AMF 是个好主意吗?

刚刚在cocoa(Objective-C)中找到了这个AMF库:http://github.com/nesium/cocoa-amf/

下面是著名的基准测试,显示 AMF 比 Flex 中的 JSON + gzip 更小、更快:http://www.jamesward.com/census/

最佳答案

我认为 AMF 不会比 JSON 小很多。事实上,很多情况下它可以稍大一些。让我用一个例子来展示这一点:

AMF 以以下二进制格式存储字符串“asdf”:

0x12            /* type = string */
0x00 0x04       /* length */
'a' 's' 'd' 'f'
/* total: strlen(s)+3 bytes */

如果字符串中没有引号,JSON 会将字符串“asdf”存储在 strlen(s) + 2 个字节中。

AMF 以以下二进制格式存储 JSON 对象{"key1":"asdf","key2":"foo"}:

0x03             /* type = object */
0x00 0x04        /* length of key1 */
'k' 'e' 'y' '1'
0x02             /* value type = string */
0x00 0x04        /* length of value1 */
'a' 's' 'd' 'f'
0x00 0x04        /* length of key2 */
'k' 'e' 'y' '2'
0x02             /* type of value2 */
0x00 0x03        /* length of value2 */
'f' 'o' 'o'
0x00 0x00 0x09   /* end of object */
/* total: 30 bytes, while the JSON string is 28 bytes */

上面的示例是在 AMF0 中,但我认为 AMF3 不会有太大不同。

AMF0 中唯一可以显着减少带宽的功能是它包含引用类型:如果您发送同一个大对象两次,第二个对象将只是第一个实例的反向引用。但恕我直言,这是一种罕见的情况(它仅适用于对象,不适用于字符串)。

所以我会推荐 JSON(如果你真的想节省字节,你可以用 zlib 或其他东西压缩它):它更容易阅读,有更多的实现,并且规范很清晰(而 Flash 实现有时与规范不同 - 我们都喜欢 Adob​​e ;))

关于iphone - 在 iPhone 上使用 AMF 而不是 JSON? (对于网络服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933429/

相关文章:

actionscript-3 - 从Array()中间删除一项的最快方法

c# - 用投影搭建互动楼层?

javascript - 从 jQuery 中的字符串解析 JSON

ios - 当应用程序未运行时,在后台以固定时间间隔重复调用函数

iphone - 如何将选项(到 didFinishLaunchingWithOptions)传递到我从调整中激活的应用程序?

apache-flex - 如何确定TileList中最后取消选择的项目?

php - jquery json循环数据 - 只是无法弄清楚这一点

iphone - 有什么方法可以从 Iphone 上收到的短信中获取发件人电话号码?

iphone - 在 Swift 的另一个数组中删除数组中的项目

Java jackson : JSON value unknown