关于Andrdoid编程中出现BufferQueue的“queueBuffer: fence is NULL”的一种解决方案

1 问题描述

今天编程的时候又遇到一个错误 我进行的是Android程序实现
使用的编译工具是Eclipse LogCat的调试信息如下图
关于Andrdoid编程中出现BufferQueue的“queueBuffer: fence is NULL”的一种解决方案_第1张图片

可以看到最后导致的结果就是显示 无法读取文件“No file...”
实际上我后来通过DDMS查看文件目录 文件的确是存在的 
也不存在Android项目权限的问题 因为之前已经读取了许多文件数据 
可以看到“4750 HRIR” 就是我显示的文件读取数量的提示信息
那么为什么会出现这样的问题呢

2 解决过程

因为我已经写过C++的代码 
C++代码里面有一个很重要的要点就是:需要对文件流的资源进行严格合理的管控
如果有一个文件流没有管理好 就可能会出现许多灵异的错误
这感觉令人情不自禁
所以我猜想这里也有可能出现类似的问题 因为前面我读取了很多文件信息
可以看到“4750 HRIR” 也就是已经读取了4750个文件信息
所以我想到可能是没有关闭文件流的原因 也就是没有调用close()
果然我加上了close()的代码就没有问题了 一切变得正常了
所以一定要记得关闭文件流

3 测试

加上close()语句后 一切变得正常了

4 后记

这真的是一个十分重要的教训 
原本以为由于Java优秀的垃圾回收机制 就可以随意的使用资源而不管不顾
后来发现 这样的编程思想的确是不符合实际工程的需要的
在这里 一个具体的经验就是:
需要严格合理地管控文件流资源 注意在合适的时间点对文件流进行资源的释放
也就是close() 确保资源的开销合理化 这样的观点对于Java和C++同样适用


你可能感兴趣的:(Java学习)