我想实现一个通用的,可重用的类,它允许在读取数据之前在流上设置Offset。理想情况下,我更喜欢使用它来处理所有InputStream,因此当我从不同的源获取它们时,我不必将它们包装在每一个中。
我在SO中找到了关于PositionInputStream的解决方案,但这并不是我想要的。任何人都可以推荐Offset InputStream的现有实现吗?
答案 0 :(得分:1)
我认为最后,所有实现最多只能读取第一个“偏移字节”,
但不会向用户提供此信息,
然后返回用户他希望读取的字节。
例如,假设您的基础架构基于decorator模式,并将“包装”的InputStream保存为成员。
读取方法的代码(带偏移和长度参数)可能看起来或多或少如下:
public int read(byte[] b,
int off,
int len)
throws IOException {
innerInputStream.read(b,off,len);
}
InputStreamDecorator d = new InputStreamDecorator(new FileInputStream("myfile.txt"));
您还可以使用skip的包装实现。
您可以决定让CTOR具有要跳过的字节数参数,此CTOR将调用内部跳过方法。
例如:
public class InputStreamDecorator extends InputStream {
public InputStreamDecorator(InputStream is, long toSkip) {
this.internalStream = is;
is.skip(toSkip);
}
}