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ł?