将文件的一部分用于 File[Input/Output]Stream

Use part of a file for File[Input/Output]Stream

我想向某些二进制文件添加 header。我的问题是我想用第三方库解码文件的其余部分,该第三方库需要 FileInputStream(或 Output ofc),但没有 header ofc。所以我打算做的是从文件中读取固定数量的 X 字节(微不足道),然后让其余部分透明地显示为新流 - 没有 header - 这样第三方库就可以完成它header.

如何才能做到这一点?

我想象将文件的其余部分读入内存中的新文件流会怎样,但这似乎效率很低。有更好的解决方案吗?

谢谢。

有几种方法可以做到这一点。这是一个使用 FileChannel:

public InputStream getInputStream(final Path path)
    throws IOException
{
    final ByteBuffer buf = ByteBuffer.allocate(HEADER_SIZE);
    final FileChannel channel = FileChannel.open(path, StandardOpenOption.READ);
    channel.read(buf);
    return Channels.newInputStream(channel);
}

您可以从 FileInputStream 执行相同的操作。

注意:以上代码要求 Java 7+。