【发布时间】:2011-05-20 02:40:51
【问题描述】:
我们的应用程序必须以最少的远程 http 请求显示大量数据,因此我们在后端添加了一个端点,该端点以单个 json 响应的形式提供所有必要的数据。这会产生约 1.5MB(压缩)或大约 8MB 的未压缩 json 格式文本。
问题不大,它会在 10 到 30 秒内下载完毕,我们正在使用 ASIHTTPRequest 将整个响应写入磁盘。
现在有趣的部分来了——在将未压缩的文件读入内存映射字符串后,我们使用 stig 的json-framework 将其转换为 NSDictionary。这对于我们的应用程序的其余部分和我们其他 API 端点的典型 2 KB json 响应非常有效。但是,反序列化这 8 MB 的数据需要几秒钟(模拟器)到几分钟(3G 和第二代 iPod Touch)。
我正在研究读取所有这些数据的最佳方法。
我很想使用直接从后端提供的二进制 plist,但我们使用的是 Java,我还没有找到适合我们要求的库,而且在如此紧迫的期限内,编写自己的可能不是最好的想法。
如果有任何帮助,我们正在解析的 json 字符串主要是 X 项的数组,如下所示:
{
"items": [ { "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" }
]
}
将这个 8 MB json 格式的字符串读入内存中的 NSDictionary 最有效的方法是什么?
【问题讨论】:
-
你能把它分割成更小的文件并按需读取每个文件吗?或者您是否一次需要全部 8 MB?
-
必须选择:egads。你怎么能在这么小的屏幕上显示8MB的文字?我会选择另一种更有效的方法。
-
不是一下子全部显示出来的。这是一个交互式电视节目指南,分为一个小时的块,每个块有 900 个频道。所以它是 ~7*24 顺序表视图,每个视图都有 >900 个程序。用户目前可能只需要前 4 个小时左右,但要求他必须能够不间断地获取其他任何日期/时间。最初我一次只下载 4 小时的数据,但是跟踪 Core Data 中可用以及需要下载的代码太复杂而无法维护,因此我们选择将所有数据下载到一通。
标签: iphone objective-c json cocoa-design-patterns