虽然 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 实现有时与规范不同 - 我们都喜欢 Adobe ;))
关于iphone - 在 iPhone 上使用 AMF 而不是 JSON? (对于网络服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933429/