1

我需要在我无法做任何更改的 2 个接口之间实现一个包装器。基本上,包装器需要将 java 风格的流文件访问转换为标准 C 风格的 fopen/fread/fwrite/ 文件访问(在 java 中实现)。

包装器必须实现调用者所需的随机文件访问方法,即open/read/write/close/seek/flush/size/truncate;包装器必须调用一组标准的 java 文件流方法来提供调用者,被调用者为我提供输入流和输出流。

我看到了 java.io.RandomAccessFile,它将 C 风格转换为 java 流风格,我需要一些相反的东西。最困难的部分是 seek()。有什么好的(有效的)方法可以做到这一点。

4

2 回答 2

0

随机访问流的唯一方法是将其缓冲在内存中(或作为磁盘上的副本)

我建议要么

  • 将其读入 ByteArrayOutputStream 并将其转换为byte[]
  • 将流复制到临时文件(最好是 tmpfs 或 ram 驱动器),然后在其上使用 RandomAccessFile。
于 2012-08-08T17:09:52.883 回答
-2

使用 Channels 实用程序类很容易实现这一点......

// STEP 1:  Create random access file read-only
RandomAccessFile raf = new RandomAccessFile("/text.txt", "r");

// STEP 2:  Use Channels to convert to InputStream
InputStream is = Channels.newInputStream(raf.getChannel());
于 2015-01-29T19:13:12.047 回答