2
respostas

Problema ao fechar socket java.net.Socket

Olá, pessoal! Tudo bem?

Fiz um exemplo de implementação de streams de leitura com Socket, porém o compilador reclama que o socket não foi fechado. Não entendo por que está acontecendo isto, pois noutros exemplos soube que ao fechar o recurso num objeto decorator mais externo, todos os demais são fechados em cascata.

Aqui está o código:

package br.com.alura.java.io.teste;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.Socket;

public class TesteLeituraEscrita {

    public static void main(String[] args) throws IOException {

        Socket sock = new Socket(); // sem parâmetros, apenas para simular.
        InputStream is = sock.getInputStream();
        Reader r = new InputStreamReader(is);

        OutputStream os = System.out;
        Writer w = new OutputStreamWriter(os);

        try (BufferedReader br = new BufferedReader(r)) {
            try (BufferedWriter bw = new BufferedWriter(w);) {
                String linha = br.readLine();
                while (linha != null) {
                    bw.write(linha);
                    bw.newLine();
                    linha = br.readLine();
                }
            }
        }
    }

}
2 respostas

Bom dia, pode colocar o erro completo que está aparecendo ?

Guilherme, não é bem um erro, mas um warning de compilação. Quando coloco o ponteiro sobre a variável sock aparece esta mensagem:

Resource leak: 'sock' is never closed

Obs.: estou usando a JRE 1.8.

$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)