微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/java/125152.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐