下面是我的項目的代碼片段,重用流光對象
while (...) {
` Map <Long,String> eventDataMap = generateEventDataMap(interactionDataJsonObj);`
ByteArrayOutputStream objOutputStreamer = new ByteArrayOutputStream();
ObjectOutputStream objectStreamer = new ObjectOutputStream(objOutputStreamer);
objectStreamer.writeObject(eventDataMap);
objectStreamer.flush();
objectStreamer.close();
objOutputStreamer.close();
byte[] interactionDataBlob = objOutputStreamer.toByteArray();
//more steps .. byte array inserted into Database
}
我想要做的是,不是每個循環迭代,這是導致堆溢出異常創造新的ByteArrayOutputStream和ObjectOutputStrem對象。
有什麼辦法可以將這些對象創建步驟放在外面並保持代碼的功能。
我試過的事情是 -
Map <Long,String> eventDataMap = generateEventDataMap(interactionDataJsonObj);`
ByteArrayOutputStream objOutputStreamer = new ByteArrayOutputStream();
ObjectOutputStream objectStreamer = new ObjectOutputStream(objOutputStreamer);
while (...) {
objectStreamer.writeObject(eventDataMap);
objectStreamer.flush();
byte[] interactionDataBlob = objOutputStreamer.toByteArray();
objectStreamer.reset();
objOutputStreamer.reset();
}
objectStreamer.close();
objOutputStreamer.close();
但是,當我讀寫這樣的數據我得到
java.io.StreamCorruptedException: invalid stream header: 73720011
例外。
請幫助/建議找到一種方法,我可以避免在循環中創造新的對象。
感謝
你對循環中的字節數組做什麼?你只粘貼到你獲得它的地步,然後粘貼到哪裏? – 2014-09-05 22:36:40
它被插入到數據庫中。 – dipamchang 2014-09-05 22:42:55