下面是我的项目的代码片段,重用流光对象
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