RandomAccessFile-подобный API для массива байтов в памяти?

Мне нужно заменить код с помощью RandomAccessFile на тот, который использует буфер в байтах в памяти (например, byte[] или производные, такие как ByteArrayInputStream). Есть ли какой-нибудь API (оболочка байтового массива?), Который имеет интерфейс, похожий на RandomAccessFile, с seek() и streamive read(), который я мог бы подключить один к одному?

Ответ 1

ByteArrayInputStream может сделать это:

  • read() работает одинаково.
  • seek(n) можно заменить на reset(), за которым следует skip(n)

Ответ 2

Могу ли я предложить Java NIO (Новый ввод-вывод) this простой и маленький учебник

Ответ 3

У меня была та же проблема. RandomAccessFile имеет много финальных и нативных методов, поэтому он не может быть перегружен.

Я закончил создание своего собственного класса SeekableInputStream, украв его без чтения: https://github.com/samtools/htsjdk/blob/master/src/java/htsjdk/samtools/seekablestream/SeekableStream.java

Я определил SeekableFileInputStream, который использует RandomAccessFile.

Я определил SeekableByteArrayInputStream, который легко определить. Этот класс также может получить любой InputStream, чтобы преобразовать его в массив байтов, так что это своего рода кешированный поток.