Мне нужно заменить код с помощью RandomAccessFile
на тот, который использует буфер в байтах в памяти (например, byte[]
или производные, такие как ByteArrayInputStream
). Есть ли какой-нибудь API (оболочка байтового массива?), Который имеет интерфейс, похожий на RandomAccessFile
, с seek()
и streamive read()
, который я мог бы подключить один к одному?
RandomAccessFile-подобный API для массива байтов в памяти?
Ответ 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, чтобы преобразовать его в массив байтов, так что это своего рода кешированный поток.
Ответ 4
У меня есть один из них - я загрузил его в http://home.arcor.de/joriki/seekable-byte-array.zip - надеюсь, что это поможет.