java中过滤流的隐式契约是什么?
我正在读一本书《Java网络编程(Elliotte Rusty Harold)》。 在这段代码之后,我遇到了下面的句子
FileInputStream fin = new FileInputStream("data.txt");
BufferedInputStream bin = new BufferedInputStream(fin);
...intermixing calls to different streams connected to the same source may violate several implicit contracts of the filter streams.
下面的代码出来了
InputStream in = new FileInputStream("data.txt");
in = new BufferedInputStream(in);
我知道这简化了语法,但我想知道“过滤流的几个隐式契约”是什么意思
# 1 楼答案
如果多个过滤流连接到同一源流,那么这些过滤流的行为可能不兼容。假设有两条流:
现在想象一下运行以下代码:
您可能希望
byte1
包含文件的第二个字节,但这是不正确的。当BufferedInputStream
第一次填充其缓冲区时,它消耗的字节远不止一个,因此违反了关于流应该如何运行的典型隐式假设这并不是唯一考虑的例子,也就是两个不同缓冲的输入流消耗相同的输入文件的情况下,不清楚这两个缓冲区中的哪一个将得到任何特定的字节,即使从EEM>中读取EME>缓冲区的顺序是清晰的。p>