Ich habe immer gelernt, immer einen Stream zu schließen, wenn ich damit fertig bin. Java 7 gibt Ihnen eine neue Möglichkeit, dies zu tun (nämlich: try-with-resources), und alles ist in Ordnung, außer dass, wenn ich die OutputStream
eines Sockets schließe, der Socket ebenfalls geschlossen wird. Dies ist kontraproduktiv, da ich Sockets in einer Streaming-Anwendung verwende.Java Socket schließend OutputStream
Also, wenn ich den Code unten ausführen, ich verstehe die ObjectOutputStream
wird nach dem Try-Block geschlossen und die OutputStream
der Buchse wird auch geschlossen, was schließlich führt meinen Sockel zu schließen.
try(ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream())) {
oos.writeObject(new MyDTO(data));
}
Ich könnte natürlich meinen Code ändern, wie unten zu sehen, aber jeder hat mir immer gesagt, soll ich meinen Streams schließen, wenn ich sich mehr verwenden. Und das ist nur eine Methode, aber ich habe mehrere andere Methoden, die auch die OutputStream
und ObjectOutputStream
verwenden, um Daten an meine Client (s) zu senden.
try {
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream())
oos.writeObject(new MyDTO(data));
}
Muss ich andere Fehler und Fehlverhalten als Folge zu erwarten haben, nicht die ObjectOutputStream
schließen? Ich denke, es ist schön, dass der Socket geschlossen ist, wenn Sie Anwendungen mit stoßweise Verkehr haben, aber es ist irgendwie komisch, wenn Sie eine Streaming-Anwendung machen.
Was ist die beste Praxis? Bring es mir bitte bei.
Vielen Dank für Ihre Eingabe. Meine Frage war mehr, wenn es irgendwelche Probleme geben könnte, wenn ich den OutputStream wiederverwende und es mit mehr als einem ObjectOutputStream verwende. Die ObjectOutputStreams werden korrekt finalisiert/haben keinen Einfluss auf den Socket, nachdem ich ihren Bereich verlassen habe (d. H. Den try-Block)? –
Auch wenn es funktioniert hat, ist es nicht schlau, einen Stream zu schließen, den du noch nicht benutzt hast. Es ist nur unnötige Arbeit von Ihrer Seite. – Kayaman