尽管与RI一致,但这种行为与此不一致 可用(),违反Liskov替代原则。这个 方法不应该使用。
这种方法为何以及如何违反原则?
作为一个附带问题,RI代表什么?
答案 0 :(得分:1)
根据API文档判断,这种覆盖方法的实现不能提供与the superclass version相同的保证。
超类InputStream
在阻止方面提供以下保证:
返回可以读取或跳过的估计字节数 没有阻止更多输入。
请注意,此方法提供了一种弱保证,即它不是 在实践中非常有用。
首先,保证是“没有阻止更多输入” 比“不阻塞”:读取可能仍然阻止等待I / O. 完成 - 保证仅仅是它不必等待 无限期地写入数据。这种方法的结果应该是 不能用作在不应该的线程上进行I / O的许可证 阻止。
但是,子类InflaterInputStream
不提供相同的保证:
1的结果不保证可以返回更多字节, 有或没有阻止。
因此,如果不考虑阻止行为的差异,则无法使用InflaterInputStream
代替普通InputStream
。