我有9 MB的txt文件,里面有json对象。我需要解析使用gson流, 我做完了
AssetManager assetManager = activity.getAssets();
InputStream inputStream;
inputStream = assetManager.open(fileName);
JsonReader reader = new JsonReader(new InputStreamReader(inputStream,
"UTF-8"));
JsonElement json = new JsonParser().parse(reader);
JsonArray array = json.getAsJsonArray();
Gson gson = new Gson();
String interationString;
for (JsonElement jsonElement : array) {
interationString = jsonElement.getAsJsonObject().get("drug")
.toString();
Log.d("drug", interationString);
Drug drug = gson.fromJson(interationString, Drug.class);
Log.d("drug", "" + drug);
DatabaseManager.getInstance().saveDrug(drug);
}
我把json文件放在assest中。但是在使用4.0的设备上工作但在模拟器2.3中它无法工作并显示日志
05-29 11:19:41.290: D/dalvikvm(164): GC_EXPLICIT freed 74K, 46% free 3344K/6151K, external 1323K/1554K, paused 84ms
05-29 11:19:46.330: D/dalvikvm(373): GC_EXPLICIT freed 2K, 51% free 2718K/5511K, external 716K/1038K, paused 87ms
05-29 11:19:51.370: D/dalvikvm(203): GC_EXPLICIT freed 15K, 51% free 3083K/6215K, external 716K/1038K, paused 102ms
05-29 11:19:56.391: D/dalvikvm(573): GC_EXPLICIT freed 53K, 51% free 2771K/5639K, external 964K/1467K, paused 79ms
然后停止,我尝试解析小文件,它工作正常。 任何人都可以帮助解析Android中的长文件,以便它可以在所有Android设备中工作。
谢谢。
答案 0 :(得分:5)
通过将流解析与Gson的数据绑定相结合,您将获得最佳性能。这是一个可能适用于您的数据集的示例:
public List<Drug> readJsonStream(InputStream in) throws IOException {
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
List<Drug> drugs = new ArrayList<Drug>();
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("drug")) {
Drug drug = gson.fromJson(reader, Drug.class);
drugs.add(drug);
} else {
reader.skipValue();
}
}
reader.endObject();
}
reader.endArray();
reader.close();
return drugs;
}
请注意,必须平衡对beginArray
/ endArray
和beginObject
/ endObject
的来电。有关详细信息,请访问Gson's streaming guide。
答案 1 :(得分:1)
看起来你正在使用随android一起提供的vanilla XML解析 - 它可以使DOM模型变得非常简单,并将完整的JSON融入内存中的对象模型中(这就是你所看到的 - 很多内存分配)。
您应该确保解析器使用拉模型。我的选择是GSON,因为它具有像杰克逊那样更低的记忆力。这是我在GSON上使用的小型数据绑定库 解析我的大JSON数据: