嵌套try-with-resources语句以便将DataOutputStream实例包装在其中是一个好习惯吗?

时间:2016-10-28 17:16:32

标签: java android io try-catch code-structure

这是我的问题,我应该编写一个嵌套的尝试编码,还是应该编写没有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";
}
  

然后检查仍然不满意,告诉我不应该写嵌套尝试,这可能导致不清楚。然后,我处于两难境地。

0 个答案:

没有答案