通过HTTP发送10,000双打的最佳方式

时间:2011-02-20 00:09:48

标签: iphone google-app-engine ios ios4 double

我有一个客户端应用程序(iPhone),可以收集10,000个双打。我想通过HTTP将这个双数组发送到appengine服务器(java)。我正在寻找最好的方法来做到这一点。

Best可以定义为编程的简易性和表示的紧凑性的一些组合,因为数据量可能非常高。

我目前的想法是,我将整个双打数组转换为字符串表示形式并将其作为POST参数发送,在服务器上解析字符串并转换回双数组。虽然看起来效率低......

谢谢!

5 个答案:

答案 0 :(得分:4)

我认为您回答了自己的问题:)要注意的重点是设备上的浮点表示与服务器之间的差异。这些天他们都将成为小端,(大部分)符合IEEE-754标准。然而,在实现中仍然可能存在一些微妙的差异,例如处理非正规和无穷大,但你可能会忽略它们。我似乎记得NEON中的一些边缘情况(在iPhone的Cortex A-8中使用)与x86的处理方式不同。

如果您确实以字符串形式发送,那么您最终会在其间进行十进制和二进制转换,并且可能会失去准确性。然而,这并不是那么低效 - 它只有10,000个数字。除非您期望数千台设备不停地在您的服务器上提取这些数据。

如果你想在线路传输和设备方面有所效率,那么一种方法就是以原始二进制形式发送双打。在服务器上,将它们重新解析为双精度数(Double.longBitsToDouble)。确保在获取数据时获得正确的结束(当它出错时会很明显)。

答案 1 :(得分:2)

我想有很多不同的方法可以做到这一点。如果是我,我可能只是序列化为一个字节数组,然后base64编码它,大多数其他机制将显着增加传递的数据量。

答案 2 :(得分:1)

10k双打是80k二进制字节大约是107k左右的字符base64编码。或3个双打是24个二进制字节是32个base64个字符。有大量的base64转换示例源代码可供使用。

这比任何十进制表示转换都要好得多,因为十进制转换速度较慢,更糟糕的是可能有损。

答案 3 :(得分:0)

JSON

用yajl-obj-c进行iphone编码

和jsonarray的java读取

答案 4 :(得分:0)

如果你有一个工作方法,并且你没有发现性能问题,那么你现在拥有的方法就可以了。

除非你知道它不符合你的需要,否则不要试图找到更好的方法。

在检查时,似乎在java端,双(64字节)将是大约4个字符(16字节* 4)。现在,当我想到你的平均加倍时,让我们说10个数字和一个小数点,加上一些分隔符,如分号空格,你会看到每个小数约12个字符。这只是3倍。

所以你最初有80k的数据,现在你有240k的数据。这真的那么大吗?