Gniazda Java, wszystko napisane pozostaje w pamięci

Przesyłam obrazy przez gniazda używając ByteArrayOutputStreams w ten sposób.

ImageIO.write(image, "gif", byteArrayO);
       byte [] byteArray = byteArrayO.toByteArray();
       Connection.pw.println("" + byteArray.length);
       int old = Connection.client.getSendBufferSize();
       Connection.client.setSendBufferSize(byteArray.length);
       Connection.client.getOutputStream().write(byteArray, 0, byteArray.length);

Wszystko działa dobrze, obraz jest w końcu jak 130kb i otrzymuję go w ten sposób

int nbrToRead = Integer.parseInt(slave.input.readLine().trim());
            int old = slave.socket.getReceiveBufferSize();
            slave.socket.setReceiveBufferSize(nbrToRead);
            byte[] byteArray = new byte[nbrToRead];
            int nbrRd = 0;
            int nbrLeftToRead = nbrToRead;
            while (nbrLeftToRead > 0) {
                int rd = slave.socket.getInputStream().read(byteArray, nbrRd, nbrLeftToRead);
                if (rd < 0)
                    break;
                nbrRd += rd; 
                nbrLeftToRead -= rd;
            }

            ByteArrayInputStream byteArrayI = new ByteArrayInputStream(byteArray);

            BufferedImage img = ImageIO.read(byteArrayI);

Działa dobrze, ale każdy obraz wysłał stertę pamięci Java o wartości 50 MB. Próbowałem ustawić wartość odbierania bufora, ale nadal pozostaje. Przechodzi do maksimum w sterty, a następnie pozostaje przez chwilę, a następnie zatrzymuje się.

Jak mogę wyczyścić bufor, aby po odebraniu bajtów go pozbył?

questionAnswers(4)

yourAnswerToTheQuestion