我应该始终将输入流包装为缓冲输入流吗?

2022-09-01 02:41:38

当我知道给定的输入流是否不是缓冲的时,总是将输入流包装为缓冲的输入流是否有意义?例如:

InputStream is = API.getFromSomewhere()
if(!(is instanceof BufferedInputStream))
  return new BufferedInputStream(is);
return is;

答案 1

当我知道给定的输入流是否不是缓冲的时,总是将输入流包装为缓冲的输入流是否有意义?

不。

如果您可能执行大量小读取(一次一个字节或几个字节),或者如果您想使用缓冲API提供的一些更高级别的功能,这是有道理的;例如方法。BufferedReader.readLine()

但是,如果您只打算使用和/或方法执行大块读取,则将 包装在a中没有帮助。read(byte[])read(byte[], int, int)InputStreamBufferedInputStream

(作为对@Peter Tillman对自己答案的评论的回应,块读取用例肯定占类使用的0.1%以上!但是,他是正确的,因为当您不需要时使用缓冲API通常是无害的。InputStream


答案 2

我不会那样做,我会把它留在尽可能高的抽象级别。如果您不打算使用BufferedStream的标记和重置功能,为什么要费心包装它呢?

如果消费者需要它,最好把它包装在那里。


推荐