因此,Java NIO架构师没有创建一个ByteBuffer接口,而是一个
ByteBuffer
class,它不是一个最终的类,但它没有包公共构造函数,因此它不能在其包之外被子类化.阿福. :P
我有一个程序,使用内存映射文件字节缓冲区(通过FileChannel.map()获得)在一堆的地方,我正在尝试追踪一个讨厌的错误,在该文件的问题是保持打开,因为有至少一个不被释放到垃圾回收的ByteBuffer.
我想创建一个看起来像字节缓冲区的InstrumentedByteBuffer类,但是装饰一个常规的ByteBuffer(或它的子类,例如MappedByteBuffer),并跟踪它的存在(包括由duplicate()和slice()创建的新缓冲区) – 方式我可以保持我的代码完整,使用ByteBuffer,我只需要装饰原始的字节缓冲区.
解决方法
I’m trying to track down a nasty bug where the file in question is
left open because there is at least one ByteBuffer that isn’t released
to garbage collection
这没有道理.未收到的ByteBuffer将不会阻止文件被关闭.你正在树上错误的树.然而,MappedByteBuffer有一个众所周知的问题,从而不会垃圾回收,保持文件的有效打开.这真的是一个设计问题:它已经知道了多年,但没有真正的解决方案.道德是不要使用大量的MappedByteBuffers.