有一个共同的模式,当每个应用程序层处理来自流的数据往往将其包装到BufferedInputStream中时,总的来说,有很多缓冲区,从缓冲区填充,从缓冲区填充等等。
我认为这是不好的做法,并且想要质疑:它如何影响性能?这会导致错误吗?
答案 0 :(得分:3)
这是一个非常普遍的问题,但我想说有很多层缓冲输入流(用任何语言)都有很多问题。
关于此事的几点想法。我相信拥有更好Java知识的人可以提供更详细的分析。
答案 1 :(得分:1)
由于额外的缓冲区,它会增加内存占用,但我怀疑它很少见,因为它可能会对给定的程序产生重大影响。这是在您需要之前不尝试优化的标准规则。
Theres也必然是一个轻微的处理器开销,但这将更不重要。
这一切都取决于它的使用量,如果有很多大型链条可能会出现问题,但我认为这不太可能是一个问题。
正如大卫所说,它很可能表明设计不佳。组件能够直接共享更复杂的对象可能更有效,但这一切都归结为具体用途(而且我很难想到一个原因)您将以这种方式使用多个缓冲流。)
答案 2 :(得分:1)
这确实是非常糟糕的做法,确实可能导致错误。如果方法A进行了一些读取,然后将流传递给附加BufferedInputStream并进行更多读取的方法B,则BufferedInputStream将填充其缓冲区,这可能会消耗方法A在方法B返回时期望仍然存在的数据。方法B的BufferedInputStream提前读取数据可能会丢失。
关于开销,实际上,如果读/写足够大,无论如何都会绕过中间缓冲区,因此没有你想象的那么多的额外复制:性能影响主要是额外的内存空间加上额外的方法调用。