java – 我如何子类化ByteBuffer?

前端之家收集整理的这篇文章主要介绍了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.

原文链接:https://www.f2er.com/java/125152.html

猜你在找的Java相关文章