Java 内存中字节数组的RandomAccessFile-like API?

Java 内存中字节数组的RandomAccessFile-like API?,java,Java,我需要将使用RandomAccessFile的代码替换为使用内存字节缓冲区的代码(例如byte[]或类似ByteArrayInputStream)。是否有一些API(字节数组包装器?)的接口类似于RandomAccessFile,带有seek()和streamishread(),我可以一对一地插入它们?我碰巧有一个——我上传了它——希望能有所帮助。我可以建议(新的I/O)检查简单和小教程可以做到: read() seek(n)可以替换为reset()后跟skip(n) 我也有同样的问题。 Ra

我需要将使用
RandomAccessFile
的代码替换为使用内存字节缓冲区的代码(例如
byte[]
或类似
ByteArrayInputStream
)。是否有一些API(字节数组包装器?)的接口类似于
RandomAccessFile
,带有
seek()
和streamish
read()
,我可以一对一地插入它们?

我碰巧有一个——我上传了它——希望能有所帮助。

我可以建议(新的I/O)检查简单和小教程

可以做到:

  • read()
  • seek(n)
    可以替换为
    reset()
    后跟
    skip(n)
    • 我也有同样的问题。 RandomAccessFile有许多finale和native方法,因此不能重载

      我最终创建了自己的SeekableInputStream抽象类,并没有事先准备好:

      我定义了SeekableFileInputStream,它使用RandomAccessFile

      我定义了SeekableByteArrayInputStream,这很容易定义。
      该类还可以获取任何InputStream,将其转换为字节数组,因此这是一种缓存流。

      除非您也需要写入,
      DataInputStream
      可以轻松包装以提供
      seek()
      功能,其余功能已经存在。这不是一个完美的解决方案,但如果所有其他方法都失败了,那么实现起来就相对轻松。你能用一个临时文件来代替吗?也不错,但缺点是接口与RandomAccessFile大不相同。通过在DataInputStream之上构建,您可以得到一些实现DataInput的东西,并且使用RandomAccessFile作为DataInput的代码无需更改。joriki,
      DataInput
      不提供
      seek()
      ,因此,传递给需要
      DataInput
      的方法的
      RandomAccessFile
      将不太可查找。是的,但您必须引入一个新的接口,该接口同时具有
      read()
      seek()
      方法。现有的Java I/O接口(新的或旧的)都没有这样的接口。一旦有了这个接口,就必须创建两个实现:一个使用
      RandomAccessFile
      ,另一个使用
      ByteArrayInputStream