【问题标题】:Java why are "readAllBytes" and "readNBytes" methods not synchronized?Java为什么“readAllBytes”和“readNBytes”方法不同步?
【发布时间】:2018-07-06 17:12:30
【问题描述】:

我经常看到这些方法在 Java 9 的 InputStream 层次结构中不同步。想知道如果多个线程运行这些方法会怎样?例如,read(byte b[], int off, int len)readNbytes 方法几乎相同,但 readNBytes 不同步。为什么?

【问题讨论】:

  • 方法是否为synchronized,是一个实现细节。因此,当我查看 InputStream 或者,例如FileInputStream既不是read(byte b[], int off, int len)也不是readNbytes,是synchronized,所以当你看到readsynchronized时,你一定是在查看不同的输入流实现。跨度>

标签: java io stream


【解决方案1】:

同步需要更多开销,如果不需要,则会不必要地降低性能。与您的问题相关的另一个示例是 StringBuilderStringBuffer 之间的区别。

如果您的输入流可能异步关闭,则不应使用readNbytes

readNbytes 有助于避免大文件的内存问题。在这些情况下,这将比readAllBytes 更可取,因为它允许您以最多 N 字节的可管理块轻松读取文件(或文件的一部分)。

【讨论】:

  • 那么你知道我应该什么时候使用它吗?
  • 但是readNBytes 方法使用read 方法。那么如何更快呢?
  • 我没看出来,readNbytesreadAllBytes 的区别与问题有什么关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2011-05-22
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多