画像のバイトを書き込んでから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
これが終わったら直接処分したいです。