java - 我如何继承 ByteBuffer?

标签 java nio bytebuffer

所以 Java NIO 架构师并没有制作 ByteBuffer 接口(interface),而是制作了一个 ByteBuffer class ,它不是最终类,但它没有包公共(public)构造函数,因此不能在其包之外进行子类化。呸。 :P

我有一个程序在很多地方使用内存映射文件字节缓冲区(通过 FileChannel.map() 获得),我正试图追踪一个令人讨厌的错误,其中有问题的文件保持打开状态,因为至少有一个 ByteBuffer 没有被释放到垃圾回收。

喜欢创建一个看起来像字节缓冲区的InstrumentedByteBuffer类,但装饰了一个常规的ByteBuffer(或其子类,例如MappedByteBuffer) 并跟踪它的存在(包括由 duplicate()slice() 创建的新缓冲区)——这样我就可以保持我的使用 ByteBuffer 的代码完好无损,我只需要装饰原始字节缓冲区。

有没有办法(通过反射或代理或其他方式)绕过私有(private)构造函数?我不需要将其运送到最终产品中,我只需要临时使用它来解决此错误。

最佳答案

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

关于java - 我如何继承 ByteBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7716341/

相关文章:

java - 如何使用 Java 设置 Selenium WebDriver?

java - 为什么 FileChannel 的性能比 MemoryMappedBuffer 更好?

java - java unsafe中getXXXVolatile与getXXX有什么区别?

java - 将 ByteBuffer 的一部分转换回 String

java - 致命异常

java - 在单元测试时访问私有(private) ArrayList (Java/JUnit)

java - Maven Eclipse Java 错误类型的层次结构...不一致

Java NIO SocketChannel isOpen 和 isConnected 方法

java - 从 ByteBuffer 到双数组

java - 每次将大约固定大小的字节数组发送到另一种方法