gee*_*jay 40 java stream java-io
当我知道给定的InputStream是否不是缓冲的时候,总是将InputStream包装为BufferedInputStream是否有意义?例如:
InputStream is = API.getFromSomewhere()
if(!(is instanceof BufferedInputStream))
return new BufferedInputStream(is);
return is;
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 34
当我知道给定的InputStream是否不是缓冲的时候,总是将InputStream包装为BufferedInputStream 是否有意义?
没有.
如果您可能执行大量小读取(一次一个字节或几个字节),或者如果您想使用缓冲API提供的某些更高级别功能,则这是有意义的; 例如,该BufferedReader.readLine()
方法.
但是,如果您只是使用read(byte[])
和/或read(byte[], int, int)
方法执行大块读取,则包装InputStream
在a BufferedInputStream
中无济于事.
(回应@Peter Tillman对自己的答案的评论,块读取用例肯定代表了超过0.1%的InputStream
类的使用!!但是,他是正确的,因为在使用缓冲的API时通常是无害的你不需要.)
我不会这样做,我会把它留在最高的抽象级别.如果您不打算使用BufferedStream的标记和重置功能,为什么还要包装呢?
如果消费者需要它,最好将它包装在那里.