关于IO流

venus224 2012-11-15 03:43:10
InputStream is = null;
和
is.close();
效果是否一样?
...全文
241 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cengjingyiwei 2012-11-16
  • 打赏
  • 举报
回复
楼上都是正解,感觉楼主还没有理解函数调用与函数定义的区别。
huntor 2012-11-15
  • 打赏
  • 举报
回复
引用 5 楼 venus224 的回复:
引用 3 楼 dr8737010 的回复:InputStream is = null;只是引用置null成为可被垃圾回收的对象,但占用的资源还在,而close则是释放所占用的资源。 所以有些资源必须由程序员明确调用某方法来释放,否则可能一直会占用内存。就像Linux系统子进程,退出以后如果不被回收,会成为僵尸进程。 Java code?12345678910111……
由方法的调用者负责关闭流。就像URL类的openStream方法
chenjwjw 2012-11-15
  • 打赏
  • 举报
回复
不close或flush资源是无法写入到文件中去的,而将对象的引用置为null只是改变了对象的引用,等待GC回收,资源并没有写入到文件!
BadPattern 2012-11-15
  • 打赏
  • 举报
回复
引用 7 楼 venus224 的回复:
引用 6 楼 dr8737010 的回复:引用 5 楼 venus224 的回复:引用 3 楼 dr8737010 的回复:InputStream is = null;只是引用置null成为可被垃圾回收的对象,但占用的资源还在,而close则是释放所占用的资源。 所以有些资源必须由程序员明确调用某方法来释放,否则可能一直会占用内存。就像Linux系统子进程,退出以后……
流使用完了记得释放就行了,不释放进程退出以后,所占用的文件描述符会被操作系统回收。
venus224 2012-11-15
  • 打赏
  • 举报
回复
引用 6 楼 dr8737010 的回复:
引用 5 楼 venus224 的回复:引用 3 楼 dr8737010 的回复:InputStream is = null;只是引用置null成为可被垃圾回收的对象,但占用的资源还在,而close则是释放所占用的资源。 所以有些资源必须由程序员明确调用某方法来释放,否则可能一直会占用内存。就像Linux系统子进程,退出以后如果不被回收,会成为僵尸进程。 Java……
那其实资源还是相当于没有释放,会不会有隐患?
BadPattern 2012-11-15
  • 打赏
  • 举报
回复
引用 5 楼 venus224 的回复:
引用 3 楼 dr8737010 的回复:InputStream is = null;只是引用置null成为可被垃圾回收的对象,但占用的资源还在,而close则是释放所占用的资源。 所以有些资源必须由程序员明确调用某方法来释放,否则可能一直会占用内存。就像Linux系统子进程,退出以后如果不被回收,会成为僵尸进程。 Java code?12345678910111……
流的关闭要在使用完以后再执行,你这里这个方法需要将流返回出去给其他方法使用,这没问题,肯定不能关闭,但其他地方使用了这个流以后要关闭。
venus224 2012-11-15
  • 打赏
  • 举报
回复
引用 3 楼 dr8737010 的回复:
InputStream is = null;只是引用置null成为可被垃圾回收的对象,但占用的资源还在,而close则是释放所占用的资源。 所以有些资源必须由程序员明确调用某方法来释放,否则可能一直会占用内存。就像Linux系统子进程,退出以后如果不被回收,会成为僵尸进程。
public InputStream getUrlInputStream() throws Exception {
		URL url = null;
		InputStream is = null;
		try {
			inputPath = URLDecoder.decode(inputPath, "UTF-8");
			url = new URL(inputPath);
			is = url.openStream();
		} catch (Exception ex) {
			ex.printStackTrace();
		} 
		/**finally {
			try {
				//if (is != null)
					//is.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}*/
		return is;
	}
如果是这个代码,关闭了就无法返回资源了?这个要怎么处理呢?
BadPattern 2012-11-15
  • 打赏
  • 举报
回复
查看了流的close源码,最终会调用到操作系统提供的接口close(int fd)函数,每个打开的流都和一个文件描述符fd对应,这个函数的作用是:closes a file descriptor, so that it no longer refers to any file and may be reused. 很显然这种功能是将一个引用置null做不到的。
BadPattern 2012-11-15
  • 打赏
  • 举报
回复
InputStream is = null;只是引用置null成为可被垃圾回收的对象,但占用的资源还在,而close则是释放所占用的资源。 所以有些资源必须由程序员明确调用某方法来释放,否则可能一直会占用内存。就像Linux系统子进程,退出以后如果不被回收,会成为僵尸进程。
aimsgmiss 2012-11-15
  • 打赏
  • 举报
回复
哪个说的是一样的!
boey584 2012-11-15
  • 打赏
  • 举报
回复
不一样。is.close();是手动的关闭输入流,它将当前缓存中内容输出完毕,并且关闭相关占用的资源,而InputStream is = null; 只是把输入流对象的引用释放掉了。有些数据还在缓存里,并没有真正写进文件,最好自己手动关,把缓存的数据都写进文件,而且如果你不关的话,可能别的程序就不能访问这个文件了,关了也节省资源,良好的习惯
源码直接下载地址: https://pan.quark.cn/s/b2e30c4b4277 依据所提供的文件资料,可以总结出以下核心内容: 1. 华硕玩家国度x79 R4G主板属于高端级别的主板,归类于华硕玩家国度系列中的RAMPAGE IV GENE型号。该主板主要面向高端用户及游戏爱好者,具有卓越性能的特点。 2. 华硕玩家国度x79 R4G主板的使用指南采用简体中文版本,并以PDF格式发布。用户手册全面地阐述了该主板的操作方法和各项功能。 3. 版权声明明确指出,本手册包含的所有内容均受到著作权法的保护。未经华硕电脑股份有限公司(简称“华硕”)的许可,禁止进行任何形式的复制、剽窃、翻译或分发。 4. 免责声明具体说明,华硕提供的用户手册依照其发布时的状态呈现,不提供任何明示或暗示的保证。用户使用手册所面临的风险需自行承担,且华硕不对使用手册后的任何结果或信息的精确性或可靠性提供保证。 5. 用户手册中强调,使用本手册后可能引发的风险和损失,涵盖但不限于利益损失、业务中断、数据遗失或其他经济上的损失,华硕及其授权人员、雇员等均不承担相应责任。 6. 华硕拥有随时更新用户手册的权力。当产品规格或驱动程序发生变化时,用户手册将进行相应的修订。用户可以通过华硕的客户服务网站或直接联络华硕电脑客户关怀中心以获取最新版本的信息。 7. 第三方产品名称或内容的所有权和知识产权归属于各自的所有者,并受到相关法律法规的保护。 8. 在华硕的保修政策中,若产品经历过未经华硕授权的维修、规格调整、部件更换或其他未授权操作,或者产品序列号模糊不清或遗失,产品将不再享受华硕的保修和服务。 9. 华硕供应的主板及显卡产品在中国大陆地区(不包括港澳台地区)实施三年免费保修服务及全国联保服务...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧