首页 > 编程语言 >Java的try-resource

Java的try-resource

时间:2022-10-02 23:34:39浏览次数:50  
标签:Java new inputStream try reader resource line null

原来是这个,这个是之前的try catch,包括最后进行关流等操作。

private String getBodyString(final ServletRequest request) throws IOException {
StringBuilder sb = new StringBuilder();
InputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = cloneInputStream(request.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
inputStream.close();
}
if (reader!=null){
reader.close();
}
}
return sb.toString();
}

JDK7新增的try-with-resource可以改善这一写法

private String getBodyString(final ServletRequest request) throws IOException {
var sb = new StringBuilder();
try (
var inputStream = request.getInputStream();
var reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
) {
var line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}

而try-with-resource则只是语法糖
实际编译上面代码后:
可以看到高亮行进行了关流

private String getBodyString(ServletRequest request) throws IOException {
StringBuilder sb = new StringBuilder();

try {
ServletInputStream inputStream = request.getInputStream();

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));

try {
String line = "";

while((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (Throwable var9) {
try {
reader.close();
} catch (Throwable var8) {
var9.addSuppressed(var8);
}

throw var9;
}

reader.close();
} catch (Throwable var10) {
if (inputStream != null) {
try {
inputStream.close();
} catch (Throwable var7) {
var10.addSuppressed(var7);
}
}

throw var10;
}

if (inputStream != null) {
inputStream.close();
}
} catch (IOException var11) {
var11.printStackTrace();
}

return sb.toString();
}

作者:​DATA_MONK​​​



标签:Java,new,inputStream,try,reader,resource,line,null
From: https://blog.51cto.com/u_11956468/5729542

相关文章

  • 4.1 栈及其Java实现
    直接看代码(分析)(1)定义栈的数据结构packagehello.java.data.datastructure;/***基于数组实现的顺序栈*param<E>*/publicclassStatic<E>{priv......
  • Java_Lamda表达式
    Lamda表达式λ希腊字母表中排序第十一位的字母,英文为Lambda避免匿名内部类定义过多其实质属于函数式编程的概念(params)->expression[表达式](params)->statement......
  • 使用JAVA代码实现POST发送application/x-www-form-urlencoded请求
    前言在实际开发过程中,我们经常是使用的POST发送application/json;charset=utf-8格式请求,但是有时候接口会设计成application/x-www-form-urlencoded,这就需要我们随机应变,......
  • 归并排序Java
    归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。其思想为:分解:分解待排序的n个元素的序列成各具n/2个元......
  • 力扣532(java)-数组中的 k-diff 数对(中等)
    题目:给你一个整数数组 nums和一个整数 k,请你在数组中找出不同的 k-diff数对,并返回不同的k-diff数对的数目。k-diff 数对定义为一个整数对(nums[i],nums[j])......
  • Java遍历文件夹
    Java遍历文件夹简单写了一个打印目录下所有文件以及文件夹的代码,类比于树的遍历,写了深度优先和广度优先的遍历。并且还写了个JDK1.7接口提供的的版本。深度广度遍历都用......
  • 9月30Java类与对象中动手动脑
    类与对象定义了一组大体相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性对象则是类的具体化,是类的实例。类通过派生类可以有子类,同样也可以有父类,形......
  • java学习之:类和对象、语句块、方法、递归结构!
    语句块和方法语句块语句块确定了局部变量的作用域。语句块嵌套,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用语句块外的变量,语句块中定义的变量作用域只限于语句......
  • javascript>=和<=
    一个条件都不满足为false,至少满足一个条件为truevara=10console.log(a>10);//false;console.log(a<10);//false;console.log(a==10);//trueconsole.log(a>=10);//true1......
  • 【Java】01基础-05 方法
    1.方法概述1.1方法的概念方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集注意:方法必须先创建才可以使用,该过程成为方法定义方法创建后并不......