我有一个客户端应用程序(iPhone),可以收集10,000个双打。我想通过HTTP将这个双数组发送到appengine服务器(java)。我正在寻找最好的方法来做到这一点。
Best可以定义为编程的简易性和表示的紧凑性的一些组合,因为数据量可能非常高。
我目前的想法是,我将整个双打数组转换为字符串表示形式并将其作为POST参数发送,在服务器上解析字符串并转换回双数组。虽然看起来效率低......
谢谢!
答案 0 :(得分:4)
我认为您回答了自己的问题:)要注意的重点是设备上的浮点表示与服务器之间的差异。这些天他们都将成为小端,(大部分)符合IEEE-754标准。然而,在实现中仍然可能存在一些微妙的差异,例如处理非正规和无穷大,但你可能会忽略它们。我似乎记得NEON中的一些边缘情况(在iPhone的Cortex A-8中使用)与x86的处理方式不同。
如果您确实以字符串形式发送,那么您最终会在其间进行十进制和二进制转换,并且可能会失去准确性。然而,这并不是那么低效 - 它只有10,000个数字。除非您期望数千台设备不停地在您的服务器上提取这些数据。
如果你想在线路传输和设备方面有所效率,那么一种方法就是以原始二进制形式发送双打。在服务器上,将它们重新解析为双精度数(Double.longBitsToDouble)。确保在获取数据时获得正确的结束(当它出错时会很明显)。
答案 1 :(得分:2)
我想有很多不同的方法可以做到这一点。如果是我,我可能只是序列化为一个字节数组,然后base64编码它,大多数其他机制将显着增加传递的数据量。
答案 2 :(得分:1)
这比任何十进制表示转换都要好得多,因为十进制转换速度较慢,更糟糕的是可能有损。
答案 3 :(得分:0)
JSON
用yajl-obj-c进行iphone编码
和jsonarray的java读取
答案 4 :(得分:0)
如果你有一个工作方法,并且你没有发现性能问题,那么你现在拥有的方法就可以了。
除非你知道它不符合你的需要,否则不要试图找到更好的方法。
在检查时,似乎在java端,双(64字节)将是大约4个字符(16字节* 4)。现在,当我想到你的平均加倍时,让我们说10个数字和一个小数点,加上一些分隔符,如分号空格,你会看到每个小数约12个字符。这只是3倍。
所以你最初有80k的数据,现在你有240k的数据。这真的那么大吗?