面试题答案
一键面试在Java Socket编程中,为避免资源泄漏,可使用try - catch - finally
块或try - with - resources
语句。以下是两种方式的示例:
使用try - catch - finally
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SocketResourceHandlingTryCatchFinally {
public static void main(String[] args) {
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try {
socket = new Socket("localhost", 1234);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
// 进行Socket通信操作
out.println("Hello, Server!");
String response = in.readLine();
System.out.println("Server response: " + response);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用try - with - resources
(Java 7及以上)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SocketResourceHandlingTryWithResources {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 1234);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
// 进行Socket通信操作
out.println("Hello, Server!");
String response = in.readLine();
System.out.println("Server response: " + response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
在try - catch - finally
方式中,手动在finally
块中关闭资源,确保无论是否发生异常,资源都会被关闭。而try - with - resources
语句更简洁,Java会自动在语句结束时关闭实现了AutoCloseable
接口的资源,包括Socket
、BufferedReader
和PrintWriter
,从而有效避免资源泄漏。