【发布时间】:2015-03-15 20:12:32
【问题描述】:
我有一个简单的 TCP 服务器,它打印客户端发送的消息。我正在尝试修改它以使用 try-with-resource 功能。在我的示例中使用嵌套的 try-with-resource 语句是否正确?
public static void main(String args[]) throws IOException {
String receivedMessage;
try (ServerSocket serverSocket = new ServerSocket(777)) {
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Client connected");
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
while ((receivedMessage = in.readLine()) != null) {
System.out.println(receivedMessage);
}
System.out.println("Client disconnected");
}
}
}
}
}
【问题讨论】:
-
是什么让你觉得不是?
-
谷歌搜索让我想到了这一点。一些用户建议在 try 子句中放置两个用分号分隔的语句。就我而言,它不起作用。我只是想知道使用嵌套的 try-with-resource 子句是否是一种好习惯,或者是否存在其他一些有效的解决方案。
-
您不能将两者都放在一个 try 块中,因为您的第二个 try 块中的
socket.getInputStream()取决于发生在第一个 try 块中的Socket socket = serverSocket.accept(); -
我用一个示例更新了我的答案,说明您的代码可以在 try 子句中适当地使用多个资源。
-
关于
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())))中的链式资源的一些建议请参见this question
标签: java