我正在读一本书《 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);
我知道这简化了语法,但我想知道“过滤器流的多个隐式协定” 的含义是什么。
最佳答案
如果多个过滤器流连接到同一源流,则这些过滤器流可能会以不兼容的方式运行。假设有两个流,请假想:
现在想象一下运行以下代码:
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
第一次填充缓冲区时消耗了不止一个字节,因此违反了人们关于流应该如何行为的典型隐式假设。到目前为止,这还不是唯一的例子-考虑到两个不同的缓冲输入流正在使用同一个输入文件的情况-尚不清楚两个缓冲区中的哪个将获得任何特定字节,即使您使用的顺序从缓冲区读取是清除的。
关于java - Java中的筛选器流的隐式协定是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57365147/