简体   繁体   English

为输入流和错误流尝试资源

[英]Try with resource for both inputstream and errorstream

How can I use try with resource to cover all corners when it comes to getInputStream and getErrorStream 当涉及getInputStreamgetErrorStream时,如何使用try资源进行全面介绍

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
BufferedReader bufferedReader;
if(connection.getResponseCode() == 200) {
    bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
} else {
    bufferedReader = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
}

String line;
StringBuilder result = new StringBuilder();
while((line = bufferedReader.readLine()) != null) {result.append(line);}
bufferedReader.close();

if(connection.getResponseCode() != 200) {
    throw new Gson().fromJson(result.toString(), FooException.class);
} else {
    return new Gson().fromJson(result.toString(), Foo.class);
}

If I understand your question, then you might use a ternary operator ? : 如果我理解您的问题,那么您可以使用三元运算符? : ? : to construct your BufferedReader in a try-with-resources . ? :try-with-resources构造您的BufferedReader Also, I'd save the responseCode to a local variable. 另外,我会将responseCode保存到本地变量。 Something like, 就像是,

StringBuilder result = new StringBuilder();
int responseCode = connection.getResponseCode();
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
        responseCode == 200 ? connection.getInputStream() 
        : connection.getErrorStream()))) {
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        result.append(line);
    }
}
if (responseCode != 200) {
    throw new Gson().fromJson(result.toString(), FooException.class);
} else {
    return new Gson().fromJson(result.toString(), Foo.class);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM