我想从现有文件中的某个任意位置获取 Stream,例如,我需要读取/写入从第 101 个字节开始的文件。使用这样的东西安全吗?
final FileInputStream fin = new FileInputStream(f);
fin.skip(100);
Skip javadoc告诉它有时可能会跳过比指定数量少的字节数。那我该怎么办?
我想从现有文件中的某个任意位置获取 Stream,例如,我需要读取/写入从第 101 个字节开始的文件。使用这样的东西安全吗?
final FileInputStream fin = new FileInputStream(f);
fin.skip(100);
Skip javadoc告诉它有时可能会跳过比指定数量少的字节数。那我该怎么办?
您不能使用 FileInputStream 进行编写。如果要写入文件中的任意位置,则需要使用 RandomAccessFile。 不幸的是,没有简单的方法可以将 RandomAccessFile 用作 InputStream/OutputStream(看起来@aix 可能对将 RandomAccessFile 调整为 InputStream/OutputStream 有很好的建议),但是网上有各种示例适配器可用。
另一种选择是使用 FileChannel。您可以直接设置 FileChannel 的位置,然后使用 Channels 实用方法在 Channel 顶部获取 InputStream/OutputStream 适配器。
以下情况如何:
final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin