当我知道给定的InputStream不是缓冲的时,总是将InputStream包装为BufferedInputStream是否有意义?例如:
InputStream is = API.getFromSomewhere()
if(!(is instanceof BufferedInputStream))
return new BufferedInputStream(is);
return is;
bytesTransferred
非零的情况。在那之前,我无法证明这一点。[我曾经在DataInputStream和超时中丢失过数据。] - Kevin BrockbytesTransferred
从未为非零值(否则BufferredInputStream将失败)。这也可能是不同平台/供应商上JVM实现可能产生不同结果的情况 - 我刚在带有Sun / Oracle Java的Windows 7上进行了测试。 - Kevin Brock这也取决于您将如何从InputStream中读取。如果您打算逐个字符/字节地读取它(即read()),那么BufferedInputStream将通过代表您进行批量读取来减少开销。如果您打算一次性将其读入4k或8k字节/字符数组中的一个块中,则BuffredInputStream可能不会对您有所帮助。
BufferedInputStream
相较于普通的InputStream
,只添加了标记和重置两个有用的功能。从API的角度来看这可能是正确的,但正如其他人所说,BufferedInputStream
为您处理读取缓冲。从裸露的FileInputStream
逐字节读取比从一个包装在BufferedInputStream
中的流读取要慢40倍。话虽如此,返回InputStream
并保持方法签名不变。用户可以选择包装它们。 - jasonmp85