压缩Arraylist或使用对象传递arraylist

时间:2013-12-13 14:16:41

标签: java android arraylist

我有google地图应用程序,因为googlemaps没有提供api来在Android上创建地图路线,我正在使用WebApi来获取路线。 我在ArrayList中存储路由,然后通过Intent传递到我的drow路线的活动中。如果LatLng对象少于2000它运行良好,否则如果它超过2000个对象然后我有Java Binder异常,也许Intent有限制大小。 要处理超过2000个对象的情况,我将LatLng纬度和经度保存到文件并仅传递路径,然后在activity i load file中。但是这个文件非常大~0.5-3 mB。 我怎么能解决我的问题,或者我如何用双值压缩我的arraylist?

3 个答案:

答案 0 :(得分:1)

一些想法

  • 不要使用对象封装lat / long,因为它有额外的开销。使用更简洁的数据结构,例如双打数组或纬度/经度坐标的geohash
  • 将输出压缩为建议的另一个答案
  • 更高级的选项可能是使用trie来编码geohash列表。鉴于路线将由许多彼此非常接近的坐标组成,“压缩”可能会非常高。

答案 1 :(得分:0)

您可以将数据压缩为ZipOutputStream并将其作为原始字节传递或通过ZipFile使用。如果值更频繁地出现,压缩应该非常好。

答案 2 :(得分:0)

确保在写入数据时不浪费空间。不要使用text / ASCII / XML数据结构/文件来存储数据。

使用DataOutputStreamwriteDouble(..)方法写入数据(结果:每个double值8个字节)。或者,您可以将double值转换为float并通过writeFloat(..)写入它们 - 这会使要写入的数据减半。通常,为了在地图上显示点,浮点数仍然足够精确。

阅读当然是使用DataInputStream来反过来。

压缩也是一种选择,但最好是最小化要写入的数据,因为压缩会占用大量CPU资源,这意味着它会消耗功率和时间。