繁体   English   中英

java中过滤器流的隐式契约是什么?

[英]What's implicit contracts of the filter streams in java?

我正在读一本书“Java网络编程(Elliotte Rusty Harold)”。 在此代码之后我遇到了以下句子。

FileInputStream fin = new FileInputStream("data.txt");
BufferedInputStream bin = new BufferedInputStream(fin);

...将调用混合到连接到同一源的不同流可能会违反过滤流的几个隐式契约。

以下代码出来了。

InputStream in = new FileInputStream("data.txt");
in = new BufferedInputStream(in);

我理解这简化了语法,但我想知道“过滤流的几个隐式契约”意味着什么。

如果多个过滤器流连接到同一源流,则这些过滤器流可能以不兼容的方式运行。 想象一下,作为一个假设的两个流:

  • BufferedInputStream :包含缓冲区的流过滤器(例如,用于合并读取)
  • NoChangeInputStream :在我的例子中,我甚至不需要对我的一个过滤器流有特殊行为。 此类只是将所有I / O委托给基础输入流,而不进行过滤。

现在想象一下运行以下代码:

InputStream in = new FileInputStream("data.txt");
BufferedInputStream buf = new BufferedInputStream(in);
NoChangeInputStream nop = new NoChangeInputStream(in);
int byte0 = buf.read();
int byte1 = nop.read();

您可能希望byte1包含文件的第二个字节,但这是不正确的。 BufferedInputStream在首次填充其缓冲区时消耗了多于一个字节,因此违反了一个关于流应该如何表现的典型隐式假设。

这不是迄今为止唯一的例子 - 考虑两个不同的缓冲输入流正在消耗相同的输入文件的情况 - 不清楚两个缓冲区中的哪一个将获得任何特定字节,即使你在哪个顺序缓冲区读取是清楚的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM