0

我想实现一个通用的、可重用的类,允许在读取数据之前在流上设置 Offset。理想情况下,我希望它能够与所有 InputStreams 一起使用,这样当我从不同的来源获取它们时,我就不必包装它们中的每一个。

我在 SO 中找到了关于PositionInputStream的解决方案,但这并不是我想要的。任何人都可以推荐偏移输入流的现有实现吗?

4

1 回答 1

1

我认为最后,所有实现最多只能读取第一个“偏移字节”,
但不会将其呈现给用户,
然后返回用户他期望读取的字节。

例如,假设您的基础设施基于装饰器模式,并且将“包装”的 InputStream 作为成员。

read 方法的代码(带有偏移量和长度参数)看起来或多或少像:


public int read(byte[] b,
                int off,
                int len)
         throws IOException {
    innerInputStream.read(b,off,len);
}


InputStreamDecorator d = new InputStreamDecorator(new FileInputStream("myfile.txt"));

您还可以有一个跳过的包装实现。
您可以决定拥有一个 CTOR,它具有要跳过的字节数的参数,并且此 CTOR 将调用内部跳过方法。
例如:

public class InputStreamDecorator extends InputStream {
   public InputStreamDecorator(InputStream is, long toSkip) {
      this.internalStream = is;
      is.skip(toSkip);
   }
}
于 2012-10-31T11:32:41.567 回答