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