我有Java程序,我正在阅读大小约为40GB的文件,并将数据传输和流式传输到DataOutputstream。
以下是我的代码
JSONObject jsonObj= new JSONObject();
JSONArray jsonArray = new JSONArray();
JSONObject properties = new JSONObject();
while((strLine = in.readLine()) != null)
{
if (jsonArray.length()%100 == 0) {
printJsonData(jsonArray);
// sendJsonData(jsonArray, output);
jsonArray = new JSONArray();
}
if (strLine.trim().contains("data")) {
jsonObj.put("properties",properties);
jsonArray.put(jsonObj);
if (strLine.trim().contains("data1")) {
String secondPart = strLine.split(":",2)[1];
properties.put("data1", secondPart);
continue;
}
if (strLine.trim().contains("id")) {
String secondPart = strLine.split(":",2)[1];
jsonObj.put("id", secondPart );
continue;
}
}
我有两种方法,一种是打印JSON数据,另一种是通过https发送Json数据。
private void printJsonData(JSONArray jsonArray) {
int count = jsonArray.length(); // get totalCount of all jsonObjects
for(int i=0 ; i< count; i++){ // iterate through jsonArray
JSONObject jsonObject = jsonArray.getJSONObject(i); // get jsonObject @ i position
System.out.println("jsonObject " + i + ": " + jsonObject);
}
}
private void sendJsonData(JSONObject jsonObj,DataOutputStream output) throws IOException {
int count = jsonArray.length();
for(int i=0 ; i< count; i++) { // iterate through jsonArray
JSONObject jsonObject = jsonArray.getJSONObject(i); // get jsonObject @ i position
System.out.println("Sending Data-->" + jsonObject.toString());
output.writeBytes(jsonObject.toString());
}
}
当我打电话给打印方法时,每件事情都可以。但是当我调用sendJsonData方法时。我得到OutofMemoryerror。想知道如何解决它?
答案 0 :(得分:1)
由于你没有以任何方式操纵json,我会将其视为文本文件并以此方式发送。找到一个大型JsonObject的可能性很大,所以你可能会过多地推动它。
除非存在巨大的物体,否则40gb的数组非常大。
**编辑**
或者您可以将单个json对象视为“文件”并单独推送这些字符串