Java,将文件流转换为随机访问文件

时间:2012-08-08 16:47:49

标签: java file stream java-io

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

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

我看过java.io.RandomAccessFile,它将C风格转换为java流风格,我需要反转一些东西。最困难的部分是seek()。是否有任何好的(有效的)方法。

2 个答案:

答案 0 :(得分:0)

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

我建议

  • 将其读入ByteArrayOutputStream并将其转换为byte[]
  • 将流复制到临时文件(最好是tmpfs或ram驱动器),然后在其上使用RandomAccessFile。

答案 1 :(得分:-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());