RandomAccessFile使用完毕后需要close吗?

[复制链接]
查看11 | 回复5 | 2021-1-27 05:27:04 | 显示全部楼层 |阅读模式
/**
*该测试用来测试IOUtil类中的方法:
*publicstaticStringreadString(RandomAccessFileraf,intlength)throwsException{
*/
publicclassPart4{
/**
*从给定的RandomAccessFile当前位置开始连续
*读取length个字节,并转换为字符串后返回
*转换字符串时使用的字符集为:ISO8859-1
*需要注意,由于业务逻辑要求,所以RandomAccessFile
*使用完毕后不要关闭。
*@paramraf
*@paramlength
*@return
*@throwsException
*/
publicstaticStringreadString(RandomAccessFileraf,intlength)throwsException{
byte[]buf=newbyte[length];
intlen=raf.read(buf);
Stringstr=newString(buf,0,length,"ISO8859-1");
raf.close();//此处需要close吗?close会出现什么问题?不close会出现什么问题?
returnstr;
}
publicstaticvoidmain(String[]args){
try{
/*
*该测试文件中32个字节表示的字符串为lidz,剩余
*字符全部为空格。
*/
RandomAccessFileraf=newRandomAccessFile("src/test/resources/test.dat","r");
Stringstr=readString(raf,32);
/*
*应当输出:
*内容:lidz
*/
System.out.println("内容:"+str.trim());
}catch(Exceptione){
e.printStackTrace();
}
}
}

分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:27:04 | 显示全部楼层
close()方法只要在使用完毕后调用都没有问题,不调用也不会报错。
但是使用到了文件流,用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

回复

使用道具 举报

千问 | 2021-1-27 05:27:04 | 显示全部楼层
必须close,不止io这方面,以后所有用到资源的能close的用完都要close
回复

使用道具 举报

千问 | 2021-1-27 05:27:04 | 显示全部楼层
别误导人,HttpServletResponse的getOutputStream不需要手动flush和close,servlet,特别是在制作writeStream方面的工具类的时候,如千万别在函数里面画蛇添足加close或者flush,这样一个thread里面如果多次执行你的这个writeStream函数,那么只有第一次是有效的,后面几次都无效,而且不报错!!!,到时候数据写少了都不知道怎么回事,恶心死
回复

使用道具 举报

千问 | 2021-1-27 05:27:04 | 显示全部楼层
说白了就是,自己new的Stream自己close,不是自己new的Stream千万别手痒
回复

使用道具 举报

千问 | 2021-1-27 05:27:04 | 显示全部楼层
所有楼上合起来正解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行