将文件的一部分用于 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+。
我想向某些二进制文件添加 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+。