私はJavaプログラムを持っていますが、サイズが約40GBのファイルから読み込み、フライとストリーミングのデータをDataOutputstreamに変換しています。以下はOutOfMemoryError JSON配列を出力ストリームに書き込むとき
私は2つの方法1は、JSONデータを印刷され、他方は、HTTPSを介してJSONデータを送信しているを持って自分のコード
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;
}
}
です。
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());
}
}
私がprintメソッドを呼び出すと、すべて正常に動作します。しかし、私はsendJsonDataメソッドを呼び出すとき。私はOutofMemoryerrorを取得しています。それを修正する方法をお考えですか?
? –
私は、 'sendJsonData'がどこから呼び出されたかを知ることさえできません。 –
@MichaelMarkidis int count = jsonArray.length();それを私が直した。ありがとう – Ammad