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