问题 类似于RandomAccessFile的内存字节数组的API?


我需要使用替换代码 RandomAccessFile 使用内存中的字节缓冲区(例如 byte[] 或类似的衍生物 ByteArrayInputStream)。是否有一些API(字节数组包装?)具有类似的接口 RandomAccessFile,与 seek() 流淌 read() 我可以一对一插入?


5060
2018-02-04 11:44


起源

除非你需要写, DataInputStream 可以很容易地包裹提供 seek() 功能,其余的已经存在。这不是一个完美的解决方案,但如果一切都失败了,那么实施起来相对轻松。 - biziclop
你可以使用临时文件吗? - finnw


答案:


ByteArrayInputStream 可以做到:

  • read() 工作原理相同。
  • seek(n) 可以替换为 reset() 其次是 skip(n)

9
2018-02-07 09:53



是的,但你必须引入一个兼具两者的新界面 read() 和 seek() 方法。没有现有的Java I / O接口(新的或旧的)具有这样的接口。一旦有了这个界面,就必须创建两个实现:一个使用 RandomAccessFile 和另一个使用 ByteArrayInputStream。 - Derek Mahar


我可以建议吗? Java NIO (新I / O)检查 这个 简单的小教程


3
2018-02-04 12:25



同样好,但是接口与RandomAccessFile完全不同的缺点。通过构建在DataInputStream之上,您可以获得实现DataInput的内容,并且不需要更改使用RandomAccessFile作为DataInput的代码。 - joriki
joriki, DataInput 不提供 seek()那么一个 RandomAccessFile 传递给期望a的方法 DataInput 不会很容易找到。 - Derek Mahar


我有同样的问题。 RandomAccessFile有许多结局和本机方法,所以它不能重载。

我结束了创建我自己的SeekableInputStream抽象类,通过偷偷摸摸这个: https://github.com/samtools/htsjdk/blob/master/src/java/htsjdk/samtools/seekablestream/SeekableStream.java

我定义了使用RandomAccessFile的SeekableFileInputStream。

我定义了SeekableByteArrayInputStream,它很容易定义。 这个类也能够获取任何InputStream,将其转换为字节数组,因此这是一种缓存流。


0
2017-10-16 15:31





我碰巧有其中一个 - 我把它上传到了 http://home.arcor.de/joriki/seekable-byte-array.zip  - 希望有所帮助。


-1
2018-02-04 12:02



链接已经死了.. - kolistivra