Java-Sockets, alles, was geschrieben wird, bleibt im Speicher

Ich sende Bilder mit ByteArrayOutputStreams wie folgt über Sockets.

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);

Alles funktioniert in Ordnung, das Bild hat am Ende eine Größe von 130 KB, und ich erhalte es so

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);

Es funktioniert gut, aber jedes Bild, das den Speicherhaufen von Java sendet, erhöht sich um 50 MB. Ich habe versucht, die Empfangs-Puffergröße einzustellen, sie bleibt jedoch weiterhin aktiv. Es geht auf Maximum in Haufen, bleibt dann für eine Weile und hört dann auf.

Wie kann ich den Puffer löschen, damit er die Bytes entsorgt, wenn er sie erhalten hat?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage