我想知道如果不手动关闭流,何时关闭。我的意思是,如果引用的范围不再存在,流将被关闭吗?
请考虑以下示例方案。
Class A{
InputStream in;
OutputStream out;
A(){
// Initialize and create the streams.
}
...
}
Class B{
public void myMethod(){
A a = new A();
System.out.println("End of my method.")
}
...
}
在这里,一旦完成流处理,我将退出,myMethod()
但是反过来将继续执行该程序的程序不会终止,而是继续进行其他操作。
我没有关闭溪流。一旦对A类的引用范围结束,它会自动关闭吗?(即何时myMethod()
结束)?GC会照顾吗?另外,我读到,一旦流程结束,流将关闭,并且系统释放为其他进程保留的所有资源。我们如何检查流是否打开?Java是否提供任何Linux命令或选项来进行检查?
任何帮助表示赞赏!
我认为JVM规范对此不做任何保证。您确实应该finally
关闭这些资源。
该过程结束时,操作系统将释放与其相关的所有资源(包括内存,文件句柄和网络套接字)。
有OS设施可以检查打开的文件和流,例如lsof
。
问题内容: 我有一个包装,其中包含一些表单输入,并保存数据并关闭。 我有,并且我的回调函数已执行,但是我看不到手动关闭叠加层的方法。我正在尝试使用Bootstrap 中的属性(可预测)不起作用。 问题答案: 向该元素添加一个ref,并在呈现元素后调用该方法。尚未测试,但应该可以工作:
我想做的是:打开大文件的InputStream,读取10MB的块,上传一个块,读取下一个块。 我为这个任务编写了很好的代码,但问题是ContentResolver返回ParcelFileDescriptor。AutoCloseInputStream作为InputStriam。这个实现打破了InputStream的契约,因为它在first.read()之后自动关闭,所以当我尝试读取下一个块时,我得到
问题内容: 我是hibernate的新手,在阅读了hibernateapi和教程之后,似乎该会话在不使用时应关闭。 像这样: 在独立应用程序中使用它时,我没有问题。但是我不确定在Web应用程序中使用时。 例如,我有一个servlet:从客户端接收参数,然后调用Manager来根据参数查询内容,如下所示: 我应该使用查询方法关闭会话吗? 由于有人告诉我,hibernate中的会话就像jdbc中的连接
我不想更改端口号,但收到异常“exception in thread”main“java.net.BindException:Address already in use:JVM_Bind” ServerSocket服务器=新服务器套接字(1234180);
假设我使用的是一个文档不完整的第三方库,它没有源代码。库的方法之一接受来加载各种数据。 不幸的是,Java规范(据我所知)没有提到如果在try-with-resource中手动关闭资源会发生什么。有没有人碰巧知道?
我正在尝试用PDFBOX填充重复的表单。我正在使用树状图并用单个记录填充表单。pdf表格的格式是在第一页列出六个记录,在第二页插入一个静态页。(对于大于6条记录的树映射,该过程重复)。Im获得的错误与TreeMap的大小有关。这就是我的问题所在。我不明白为什么当我用35个以上的条目填充TreeMap时,我会得到以下警告: 2018年4月23日2:36:25 AM org.apache.pdfbox