【发布时间】:2012-08-15 14:04:27
【问题描述】:
我正在将图像字节写入ByteArrayOutputStream,然后通过套接字发送。
问题是,当我这样做时
ImageIO.write(image, "gif", byteArray);
内存增加很多,有点内存泄漏。
我用这个发送
ImageIO.write(image, "gif", byteArrayO);
byte [] byteArray = byteArrayO.toByteArray();
byteArrayO.flush();
byteArrayO.reset();
Connection.pw.println("" + byteArray.length);
int old = Connection.client.getSendBufferSize();
Connection.client.setSendBufferSize(byteArray.length);
Connection.client.getOutputStream().write(byteArray, 0, byteArray.length);
Connection.client.getOutputStream().flush();
image.flush();
image = null;
byteArrayO = null;
byteArray = null;
System.gc();
Connection.client.setSendBufferSize(old);
如您所见,我已经尝试了所有方法,当我写信给ByteArrayOutputStream 时出现错误,而不是在我传输时出现。接收器没有收到任何错误。
我有什么办法可以清除 byteArray,并从内存中删除其中的所有内容?我知道reset() 有,但这里没有。完成后我想直接处理ByteArrayOutputStream。
【问题讨论】:
-
image有哪些属性?尺寸、颜色模型等? -
你用多少内存运行它?你的虚拟机设置?图片有多大?
-
您真的在
ImageIO.write(...)上收到OutOfMemoryError吗? -
写“错误来了”而不提供实际的堆栈跟踪至少是没用的......
标签: java sockets memory-leaks bytearrayoutputstream