这是我的问题,我应该编写一个嵌套的尝试编码,还是应该编写没有try-with-resources语句来封装DataOutputStream?或者有更好的解决方案吗?我非常感谢你的帮助。
我最近正在学习使用Android Studio在Android上编写一个java套接字客户端。
检查告诉我用try语句初始化一个套接字,我做了。
public static String sendSocket(String newText) {
final int timeout = 5000;
try (Socket soc = new Socket()){
final InetSocketAddress address = new InetSocketAddress("10.0.0.3", 6101);
soc.connect(address, timeout);
} catch (IOException e) {
e.printStackTrace();
}
return "socket done";
}
然后我没有非常地发送我的“newText”,所以我决定添加更多的东西。这是我在做了一些研究后写的。
public static String sendSocket(String newText) {
final int timeout = 5000;
try (Socket soc = new Socket()){
final InetSocketAddress address = new InetSocketAddress("10.0.0.3", 6101);
soc.connect(address, timeout);
if (!newText.isEmpty()) {
final byte[] buffer = newText.getBytes("UTF-8");
DataOutputStream dos = new DataOutputStream(soc.getOutputStream());
dos.write(buffer, 0, buffer.length);
dos.writeBytes("\n");
dos.flush();
dos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return "socket done";
}
但是后来检查告诉DataOutputStream应该与try-with-resources语句一起使用,我做了它再次询问,代码块最终像这样
public static String sendSocket(String newText) {
final int timeout = 5000;
try (Socket soc = new Socket()){
final InetSocketAddress address = new InetSocketAddress("10.0.0.3", 6101);
soc.connect(address, timeout);
if (!newText.isEmpty()) {
final byte[] buffer = newText.getBytes("UTF-8");
try (DataOutputStream dos = new DataOutputStream(soc.getOutputStream())) {
dos.write(buffer, 0, buffer.length);
dos.writeBytes("\n");
dos.flush();
dos.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "socket done";
}
然后检查仍然不满意,告诉我不应该写嵌套尝试,这可能导致不清楚。然后,我处于两难境地。