Java为什么是;readAllBytes";及;readNBytes“;方法不同步?

Java为什么是;readAllBytes";及;readNBytes“;方法不同步?,java,io,stream,Java,Io,Stream,我经常在Java9的InputStream层次结构中看到这些方法不同步。想知道当多个线程运行这些方法时会发生什么情况吗?例如,read(字节b[],int off,int len)和readNbytes方法几乎相同,但readNbytes不同步。为什么?同步需要更多的开销,如果不需要,则会不必要地降低性能。与您的问题相关的另一个示例是StringBuilder和StringBuffer之间的差异 如果输入流可能异步关闭,则不应使用readNbytes readNbytes有助于避免大型文件的内存

我经常在Java9的
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
正在进行
同步时,您必须查看不同的输入流实现。