Таким образом, архитекторы Java NIO создали не интерфейс ByteBuffer
, а класс ByteBuffer
, который не является конечным классом, но не имеет конструкторов public-пакета и поэтому он не может быть разделен на подклассы вне своей упаковки. Phooey. : P
У меня есть программа, которая использует отображенные в памяти файловые байтовые буферы (полученные через FileChannel.map ()) в нескольких местах, и я пытаюсь отследить неприятную ошибку, когда рассматриваемый файл остается открытым, потому что есть по крайней мере один ByteBuffer
, который не выпущен для сборки мусора.
Я бы хотел бы создать класс InstrumentedByteBuffer
, который выглядит как байтовый буфер, но украшает обычный ByteBuffer
(или его подклассы, например MappedByteBuffer
) и отслеживает его существование (включая новые буферы, созданные duplicate()
и slice()
) - таким образом, я могу сохранить свой код без изменений, используя ByteBuffer, мне просто нужно украсить оригинальный буфер байтов.
Есть ли способ сделать это (с помощью рефлексии или прокси или как угодно), чтобы обойти частные конструкторы? Мне не нужно отправлять это в конечный продукт, мне просто нужно временно использовать его для устранения этой ошибки.