我经常看到这些方法在Java 9的InputStream
层次结构中不同步,并且想知道当多个线程运行这些方法时会怎样?例如,read(byte b[], int off, int len)
和readNbytes
方法几乎相同,但readNBytes
未同步。为什么?
答案 0 :(得分:1)
同步需要更多的开销,因此,如果不需要同步,将不必要地降低性能。与您的问题相关的另一个示例是StringBuilder
和StringBuffer
之间的区别。
如果有可能异步关闭输入流,则不应使用readNbytes
。
readNbytes
有助于避免大文件的内存问题。在这种情况下,它比readAllBytes
更可取,因为它使您可以轻松地读取多达N个字节的可管理块中的文件(或文件的一部分)。