Java中使用try代码块自动关闭各种流(IO流……)

推荐写在 try 的括号中

/** 方式一、方式二是等价的
     * <li>推荐使用方式一</li>
     * @since 2023/5/18 0018
     * @author CC
     **/
    public void closeStream() throws IOException {
        //使用方式一(推荐):各种“流”,这些流都是需要关闭的。
        // -> 这些流会自动关闭。这些流的作用域仅在这个try代码块中
        try (POIFSFileSystem poifsFileSystem = new POIFSFileSystem();
             InputStream byteInputStream = new ByteArrayInputStream(new byte[1]);
             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ){
            //业务……使用:poifsFileSystem、byteInputStream、outputStream
        } catch (Exception e) {
            e.printStackTrace();
        }

        //使用方式二:各种“流”,这些流都是需要关闭的。
        // -> 这些流需要手动关闭
        POIFSFileSystem poifsFileSystem = new POIFSFileSystem();
        InputStream byteInputStream = new ByteArrayInputStream(new byte[1]);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            //业务……使用:poifsFileSystem、byteInputStream、outputStream
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            poifsFileSystem.close();
            byteInputStream.close();
            outputStream.close();
        }
    }
本文转载于网络 如有侵权请联系删除

相关文章

  • 【玩转服务器】CentOS计划任务备份Mysql数据库

    数据库的自动备份是日常服务运维非常重要的操作之一。使用腾讯云的云mysql数据库有自动备份功能,若是在服务器上单独部署mysql数据库,则需要结合计划任务,使其完成自动备份。1、首先建立sh文件用VI或者本地建立好sh文件上传服务器均可。vi/usr/sbin/mysqlbak.sh复制下段代码的意思是将mysql数据库备份在目录/home/db_bak/下,以格式“date年月日时分秒”做为目录名,将每个数据库生成单独的.sql文件。cd/home/db_bak/ dateDIR=`date+"%Y%m%d%H%M%S"` mkdir-pdb_$dateDIR foriin`/home/local/mysql/bin/mysql-uroot-proot-e"showdatabases"|grep-v"Database"|grep-v"performance_schema"|grep-v"mysql"|grep-v"information_schema"` do /h

  • 跟我学 Solidity:关于变量

    译文出自:登链翻译计划[1]译者:翻译小组[2]校对:Tiny熊[3]欢迎来到跟我学习Solidity系列中的第二篇文章。如果你还没有阅读第一篇:Solidity入门[4],我强烈建议你这样做以设置开发环境以及编写和部署第一个合约。在本文中,我们将研究Solidity中的变量,它们的类型,它们的存储方式以及如何使用它们。在Solidity[5]中,我们有两种类型的变量:状态变量这些变量在函数外部声明(例如类的属性),并永久存储在以太坊区块链中,更具体地说存储在存储MerklePatricia树中,这是形成帐户状态的信息的一部分(这就是为什么我们称其为状态变量)。diagramofMerklePatriciatree以太坊MerklePatricia树:来源[6]你可以找到有关数据存储在以太坊区块链中的更多信息,参考文章[7].状态变量可以在声明时进行初始化,并且具有以下可见性:private:状态变量仅在定义的合约里可见。public:状态变量也可以在定义合约的外部访问,因为编译器会自动创建一个与该变量同名的getter函数。internal:状态变量在定义的合约以及所有继承合约都是可

  • 图神经网络用于运动计划(CS AI)

    本文研究了使用图神经网络(GNN)解决经典运动规划问题的可行性。研究了搜索离散空间和连续空间的规划算法。本文提出了利用GNN来引导搜索算法的方法,即利用GNN提取有关规划空间拓扑的底层信息的能力。我们提出了两种技术:针对低维问题的密集固定图上的GNN和针对高维问题的基于采样的GNN。我们研究了GNN解决严重依赖于空间拓扑的规划问题的能力,例如识别关键节点,学习启发式探索以指导探索一个∗,并了解快速探索随机树(RRT)中的采样分布。我们证明,与传统的分析方法以及采用完全连接网络或卷积神经网络的基于学习的方法相比,GNN可以提供更好的结果。原文标题:GraphNeuralNetworksforMotionPlanning原文:ThispaperinvestigatesthefeasibilityofusingGraphNeuralNetworks(GNNs)forclassicalmotionplanningproblems.Planningalgorithmsthatsearchthroughdiscretespacesaswellascontinuousonesarestudied.T

  • 使用 Hexo 快速搭建博客

    什么是Hexo?Hexo是一个快速、简洁且高效的博客框架。Hexo使用Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。安装前提安装Hexo相当简单。然而在安装前,您必须检查电脑中是否已安装下列应用程序:Node.jsGit如果您的电脑中已经安装上述必备程序,那么恭喜您!接下来只需要使用npm即可完成Hexo的安装。安装Hexo所有必备的应用程序安装完成后,即可使用npm安装Hexo。$npminstall-ghexo-cli复制建站hexoinit<folder> cd<folder> npminstall复制配置您可以在_config.yml中修改大部分的配置。网站参数描述title网站标题subtitle网站副标题description网站描述author您的名字language网站使用的语言timezone网站时区。Hexo默认使用您电脑的时区。时区列表。比如说:America/New_York,Japan,和UTC。网址参数描述默认值url网址root网站根目录permalink文章的永久链接格式:year/:mon

  • 如何在vSphere Client上给虚拟机扩容

    在虚拟机扩容之前,确保虚拟机处于关闭状态。1、打开VMwarevSphereClient,然后进行登陆。2、选择需要扩容的虚拟机,以master01为例。3、打开“资源分配”栏目,然后选择编辑。 4、点击“编辑”之后,如下图所示。5、在硬件中选择硬盘1,然后选择“添加”。6、点击“添加”之后,出现下面的界面。7、选择“硬盘”,然后点击“下一步”。8、点击“创建新的虚拟磁盘”,然后选择“下一步”。9、创建磁盘的大小,这里可以自定义,按照自己的需要来进行添加。在这里,小编以50GB为例,设置完之后选择“下一步”。10、高级选项设置,直接默认即可,选择“下一步”。11、即将完成,选择“完成”。12、之后进入的界面如下,显示“正在添加”,点击“确认”。13、之后会弹出以下的界面。14、再次点击“编辑”,进入下图界面。可以发现多了“硬盘2”,此时说明添加已经完成。15、此时点击虚拟机的“摘要”栏,可以看到置备存储已经扩容了,如下图所示。说明磁盘扩容已经成功啦~~~

  • 新手入门C语言编程:使用函数必须知道的三点注意事项!

    C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“设计这个概念已经被融入到C++之中”。C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“设计这个概念已经被融入到C++之中”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。C语言中函数使用的注意事项,你们知道吗?希望能帮助有疑惑的同学更好的使用这个强大的语言特性。大家在高中的时候都求过数学函数的表达式,其实编程语言的函数与数学表达式实际上是一样的。我们都可以将其理解为一个有输入有输出的「功能黑箱」,看下图:就类似给函数一个

  • Linux命令(37)——free命令

    1.简介free命令用于显示系统内存使用情况,包括物理内存(PhysicalMemory)、虚拟内存(SwapMemory)、共享内存(SharedMemory)以及内核使用的缓冲(Buffers)与缓存(Cached)大小。在Linux系统监控的工具中,free命令是最经常使用的命令之一。free命令的所有输出值都是从/proc/meminfo中读取的。2.命令格式free[-b|-k|-m][-o][-sdelay][-t][-l][-V]复制3.选项说明-b:以Byte为单位显示内存使用情况; -k:以KB为单位显示内存使用情况; -m:以MB为单位显示内存使用情况; -g:以GB为单位显示内存使用情况; -o:不显示缓冲区调节列; -s[间隔秒数]:以指定间隔时间持续观察内存使用状况; -t:显示内存总和列; -l:显示详细的低内存和高内存统计; -V:显示版本信息。复制4.常用示例(1)使用GB为单位显示内存使用情况。[root@test~]#free-g totalusedfreesharedbufferscached Mem:626100256 -/+buffers/ca

  • 网站全站开启 HTTPS(二、腾讯云 SSL 证书)

    2017-02-0612:19:27发表评论900℃热度网站全站开启HTTPS(一、又拍云一键部署)之前写过又拍云的SSL证书一键部署,用的是Let’sEncrypt证书,而这次介绍的腾讯云用的是TrustAsia亚洲诚信的证书,Symantec™(赛门铁克)的白金合作伙伴,专业为企业提供包含数字证书在内的所有网络安全服务,它家的证书有效期是一年,而Let’sEncrypt的证书有效期是3个月,虽然会自动续期,但是身为强迫症还是选择期限久的,起码方便。如果有服务器在腾讯云上用自家的服务也是相当的不错的,下面介绍相关教程:这个网站最开始还是HTTP的,没有小绿锁。首先进入腾讯云官网注册账号,官网地址:点击右上角就可以注册:注册完毕后开始申请SSL证书:这里有一些介绍,可以看看,以便增加了解,下方也有工具可以检测是否开启HTTPS,点击立即使用:图中是我自己网站之前申请的SSL证书,我们首先点击申请证书:然后默认选择亚洲诚信免费的一年证书:填写相关资料,点击下一步:因为我的服务器是在腾讯云,并且使用腾讯云解析,所以会有第一个选项,一般用手动DNS验证就好:点击确认使用后弹出窗口:可以看到提

  • 26.C++- 泛型编程之类模板(详解)

    在上章25.C++-泛型编程之函数模板(详解)学习了后,本章继续来学习类模板类模板介绍和函数模板一样,将泛型思想应用于类.编译器对类模板处理方式和函数模板相同,都是进行2次编译类模板通常应用于数据结构方面,使得类的实现不在关注数据元素的具体类型,而只关注需要实现的功能比如: 数组类,链表类,Queue类,Stack类等使用方法通过template关键字来声明,然后通过typename关键字来定义模板类型,如下图所示:类模板的使用定义对象时,必须指定类模板类型,因为编译器无法推导类型使用具体类型<Type>来定义对象如下图所示:初探类模板写一个类模板,实现不同类型的加减乘除#include<iostream> #include<string> usingnamespacestd; template<typenameT> classOperator { public: Tadd(Ta,Tb) { returna+b; } Tminus(Ta,Tb) { returna-b; } Tmultiply(Ta,Tb) { returna*b

  • 浅谈搜索引擎技术原理与架构设计_小米商城搜索引擎架构

    大家好,又见面了,我是你们的朋友全栈君。搜索引擎是我们非常熟悉的互联网产品,上网都离不开搜索,毫无疑问,在pc端,是多数流量的入口。大家都会说,“有问题,百度一下”,当初百度靠这句广告语,打开了国内很大的市场。曾经看过一个百度员工写的段子:“今天一个出租出司机载我去上班,一边看着百度大厦一边说,你们百度不就是个框吗,要这么多员工干啥。他说的好有道理,我竟无言以对”。那么搜索引擎背后到底是什么,到底复杂不复杂,这里为大家一一解答。本文只是简要介绍一下总体需要的原理,具体的技术原理,我会在后续的文章中深入介绍。1.索引输入一个关键词,就会出现相关的文档。如果这里有三篇文档,给一个关键词,就通过字符串匹配的方法就可以找到包含该关键词的文档,这很简单。那么如果有一百篇呢,同样对这一百篇文章逐个进行搜索即可,现代计算机对于上百篇文章的检索还是可以毫秒级的时间完成的。那么,网络上数以万计乃至上亿的文章,难道也要这样逐个搜索吗。索引就是解决搜索缓慢的方案,也就是说将每篇文章进行处理,对每一个出现的词建索引。每个词对应的列表是包含这个词的文章的列表,这被称为倒排索引。于是输入一个词,只要查找这张表,就

  • Node中req.params,req.query,req.body三者的区别

    req.params,req.query是用在get请求当中,而req.body是用在post请求中的1.req.paramsapp.get('/api/getUserListById/:id',(req,res)=>{ console.log('idis:'+req.params.id); })复制通过req.params.id,我们会得到12.req.queryhttp://localhost:3000/?id=2,用req.query.id,我们会得到2,如果有两个或以上参数,用&连接,如:/?id=2&name=node,获取参数则是:req.query.id得到1,req.query.name得到node.3.req.bodyreq.body是用在post请求当中的<formaction="/login"method="POST"> <divclass="form-group"> <inputtype="text&q

  • 【思兼-Klipper 篇17】基于 Klipper 的必趣 Manta 牌夏日降温电风扇

    前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正交流。 前几日还是穿着短袖都出汗,突然间冻得直哆嗦,我就知道这是催更了,再不整理出来黄花菜都凉了。 今年夏天尤其热,不过国外也不提全球气候变暖了,缺少化石燃料的欧洲,环保少女也可以通俄。今天给大家介绍如何使用Klipper固件做一个家用桌上式电风扇。有朋友要问你说啥,Klipper不是3D打印机固件吗,还能做电风扇?其实私以为Mainsail翻译为Machine十分准确,Klipper功能强大,拓展能力强,除了本职之外,还能作为很多其他机械控制系统,比如写字机、打印平台模型清理装置(连续打印),还比如今天我们做的风扇。 这里对必趣(BigTreeTech)公司提供的硬件表示感谢。 硬件组成: 12V4线PWM调速12025台式机散热风扇,从我的九州风神大霜塔散热器上拆的 角度传感器、非自锁式按钮 BigTreeTechMantaM4P二合一主板(原型板) MKSMini12864LCD屏幕/BTTTFT35V3.0.1彩色触摸屏 测试设备: MINIWAREDS213四通道袖珍示波器 利利普OWONVDS1

  • 1008. 先序遍历构造二叉树

    返回与给定先序遍历preorder相匹配的二叉搜索树(binarysearchtree)的根结点。(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于node.left的任何后代,值总<node.val,而node.right的任何后代,值总>node.val。此外,先序遍历首先显示节点的值,然后遍历node.left,接着遍历node.right。)    解答: /** *Definitionforabinarytreenode. *structTreeNode{ *    intval; *    TreeNode*left; *    TreeNode*right; *    TreeNode():val(0),left(nullptr),right(nullptr){} *  &n

  • web.xml上下文初始化参数

    1、在web.xml文件中配置上下文参数 1<!--<context-param>标签声明上下文初始化参数,--> 2<!--上下文初始化的参数可以被应用程序用所有servlet共享--> 3<context-param> 4<!--上下文参数可以像map一样使用--> 5<param-name>One</param-name><!--参数名--> 6<param-value>hello</param-value><!--参数值--> 7</context-param> 8<context-param> 9<param-name>Two</param-name> 10<param-value>dyf</param-value> 11</context-param>复制   2、在servlet中获取上下文参数 1//@WebServlet(name="Hel

  • 【JZOJ6091】唐时月夜

    Description Solution 因为后面的矩阵总会包含前面的矩阵,所以对于每个 ( x , y ) (x,y) (x,y)的变换是由一段后缀操作实现的。同时每个操作都是线性变换,即满足 ( x , y ) (x,y) (x,y)经过变换后会到达 ( a x + b y + c , d x + e y + f ) (ax+by+c,dx+ey+f) (ax+by+c,dx+ey+f)。那么只要复合后缀的变换即可。还有一种做法是四向链表,1操作就是交换左右指针,2操作就是交换上下指针,3操作交换左上和右下指针。 Code #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #definefo(i,j,k)for(inti=j;i<=k;++i) #definefd(i,j,k)f

  • 分治算法

    B「ROI2019Day2」课桌 时间限制:16000MS空间限制:-KB 评测说明:1s,512m 问题描述 有m个班,每个班有2*N名学生。各班将轮流来到一个会议室上课,每次只有一个班在会议室。 你需要给会议室购买N张双人课桌。 供你选择的课桌分为K类,分别编为1...K号,I号课桌适合身高在Li到Ri之间的学生。 学生使用太高或太矮的课桌会感到不适,这可用「不适指数」表示,具体来说: 对于身高在这一区间内的学生,其不适指数为0; 对于身高小于Li的学生,设身高为h,则其不适指数为h-Li; 对于身高大于Ri的学生,设身高为h,则其不适指数为Ri-h。 请求出:在课桌最合适的情况下,这2mn名学生的不适指数的最小值。 解: 将n张桌子看做商品 那么对于第i号商品适用于2i到2i-1号学生 假设我们对于k个商品进行排序去重 注意到对于i号商品如果匹配u号桌子 那么[1,u-1]一定不会去匹配i及其以后的商品 这符合分治的条件 然后就可以进行分治 // #include<bits/stdc++.h> usingnamespacestd; #definelllonglong

  • 记录 工具型

    1.sass转css https://www.sassmeister.com/

  • 766. 托普利茨矩阵

    #这道题还是很简单的,判断对角线上边的数字相同就好了。#一次遍历,最左边从下到上遍历,最上边从左到右遍历。fromtypingimportListclassSolution:defisToeplitzMatrix(self,matrix:List[List[int]])->bool:#求出列的长度和行的长度。col,row=len(matrix),len(matrix[0])#其中有一个为零就代表着没有数字,返回真。ifcol==0orrow==0:returnTrueforiinrange(col-1,-1,-1):#最左边从下到上遍历。j=0#判断对较线的数字是否都相同、while0<=i+1<coland0<=j+1<row:#这里如果不相同的话直接函数返回假,就不用判断后边得了。ifmatrix[i][j]!=matrix[i+1][j+1]:returnFalsei+=1j+=1#同上。forjinrange(row):i=0while0<=i+1<coland0<=j+1<row:ifmatrix[i][j]!=matr

  • 拉格朗日插值法

    退役后把之前没学的东西补一下。 在离散数学中的拉格朗日插值。任给定$F$中$2n+2$个数$x_1,x_2,…,x_{n+1}$,$y_1,y_2,…,y_{n+1}$。其中$x_1,x_2,…x_{n+1}$互不相同。我们找到一个$n$次的多项式$L$,使得对于$\foralli,L(x_i)=y_i$。对于每一个$i$,我们构造出一个多项式$P_i$使得$P_i(x_i)=1,P_i(x_j)=0\quadj\neqi$$$P_i(x)=\prod_{k=1,k\neqi}^{n}\frac{x-x_k}{x_i-x_k}$$然后就可以得到$L$$$L(x)=\sum_{i=1}^{n}y_iP_i(x)=\sum_{i=1}^{n}y_i\prod_{k=1,k\neqi}^{n}\frac{x-x_k}{x_i-x_k}$$预处理后暴力多项式除法O(n^2)。当x是连续的时候,预处理,可以O(n)求单项值。这个式子可以变形一下:$$L(x)=\prod_{i=1}^n(x-x_i)\sum_{i=1}^{n}\frac{y_i}{(x-x_i)\prod_{k=1,k\neqi

  • 初学zipkin搭建链路追踪服务注意事项

    1.zipkinserver的搭建 注意:因为关于Zipkin的服务端,在SpringBoot2.x版本后,官方就不推荐自行定制编译了(自行搭建方式在本文末补充),反而是直接提供了编译好的jar包来给我们使用(下载zipkin-server-xxx.jar,使用JAVA命令启动该JAR,zipkin-server.jar是一个打包好的springBoot应用,springBoot自带tomcat因此只要启动JAR包就可以访问了。java-jarzipkin-server-xxx.jar启动完后访问localhost:9411可以查看统计界面)。还有其他两种方式搭建zipkinserver方式,详细情况参看 2.构件网关工程以及服务提供工程,这两个工程作为Zipkin客户端,需要将链路数据上传给ZipkinServer,同时它也作为EurekaClient。     a.网关pom如下: <dependencies>         <depen

  • 最小费用最大流 dijkstra 版本

    引入 一个优秀的代码,时间复杂度一定是很优的,SPFA+EK/dinic已经满足不了我们的需求了,所以吃饱了撑着的善于思考的人类不断地探索发现,一个更加优化的算法就此诞生。 详解 考虑之前的SPFA+EK/dinic算法,我们发现让我们被卡的飞起的地方就是SPFA那个**的\(O(nm)\)时间复杂度,所以我们迫切地需要一个更快,更高效的算法来解决这个问题。考虑到比SPFA快的单元最短路算法dijkstra不能跑负边,所以我们需要对其进行改进。 考虑对于每一个点都附上一个权值\(pe(i)\)再将每条边(假设为\(u->v\))的权值变为\(w(u,v)+pe(u)-pe(v)\)我们可以发现,在中间点的权值就被抵消掉了,只剩下了起点和终点,也就是说最短路选的路径没有变,但是最短路的值加上了\(pe(s)\)减去了\(pe(t)\),当然,这对网络流里求增广路没有影响。如果我们的\(w(u,v)+pe(u)-pe(v)\)都非负,我们的dijkstra就活过来了。 那么,我们如何让其非负呢? 通过大量实验经过严谨的推理后我们发现将起点到某个点\(v\),的\(pe(v)\)是一个

相关推荐

推荐阅读