Java为什么是;readAllBytes";及;readNBytes“;方法不同步?
我经常在Java9的Java为什么是;readAllBytes";及;readNBytes“;方法不同步?,java,io,stream,Java,Io,Stream,我经常在Java9的InputStream层次结构中看到这些方法不同步。想知道当多个线程运行这些方法时会发生什么情况吗?例如,read(字节b[],int off,int len)和readNbytes方法几乎相同,但readNbytes不同步。为什么?同步需要更多的开销,如果不需要,则会不必要地降低性能。与您的问题相关的另一个示例是StringBuilder和StringBuffer之间的差异 如果输入流可能异步关闭,则不应使用readNbytes readNbytes有助于避免大型文件的内存
InputStream
层次结构中看到这些方法不同步。想知道当多个线程运行这些方法时会发生什么情况吗?例如,read(字节b[],int off,int len)
和readNbytes
方法几乎相同,但readNbytes
不同步。为什么?同步需要更多的开销,如果不需要,则会不必要地降低性能。与您的问题相关的另一个示例是StringBuilder
和StringBuffer
之间的差异
如果输入流可能异步关闭,则不应使用readNbytes
readNbytes
有助于避免大型文件的内存问题。在这些情况下,这比readAllBytes
更可取,因为它允许您轻松地以N个字节的可管理块读取文件(或文件的一部分)。那么您知道什么时候应该使用它吗?但是readNBytes
方法使用read
方法。那么它是如何更快的呢?我不知道readNbytes
和readAllBytes
之间的差异与这个问题有什么关系。方法是否是synchronized
,是一个实现细节。因此,当我查看InputStream
或例如FileInputStream
时,read(字节b[],int off,int len)
或readNbytes
都是同步的
,因此当您看到read
正在进行同步时,您必须查看不同的输入流实现。