java – 我如何子类化ByteBuffer?

因此,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.

相关文章

Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Sh...
运行程序出现下面错误:HTTP Status 500 ------------------...
1、建立DM的profile,使用的模版在install_root/profileTempl...
使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是...
英文操作系统导致 Debug 下的变量查看时显示乱码,可通过改变...
eclipse中javascript报错问题处理:三个地方:<1&...