【问题标题】:ByteBuffer and ByteArrayInputStream same underlying byte[]ByteBuffer 和 ByteArrayInputStream 相同的底层 byte[]
【发布时间】:2017-03-12 14:07:20
【问题描述】:

ByteBufferByteArrayInputStream 共享底层byte [] 是否“安全”,只要他们只从中读取?如果我从一个然后另一个读取/获取,因为每个都有自己的内部标记/计数器等,是否有可能发生冲突?

【问题讨论】:

    标签: java bytearrayinputstream


    【解决方案1】:

    ByteBuffer.wrapByteArrayInputStream's constructor 的来源来看,看起来这两个类都会存储您传递给它们的数组而无需复制。似乎这两个类都不会修改数组,因此可以安全地在 ByteBufferByteArrayInputStream 的多个实例之间共享相同的 byte[] 数组。

    【讨论】:

      【解决方案2】:

      这是安全的,有一个警告。必须有一个 happens before 链,以确保使用共享 byte[] 的线程可以看到在 byte[] 变为“有效不可变”之前的最后一次写入。

      简单来说,设置共享时线程需要同步,

      【讨论】:

      • OP 没有询问多线程,但也许他们应该询问。
      • 嗯……在我看来……“安全”包括各种安全,包括线程安全。当我读到它时,他们正在询问线程安全等问题。
      • 我在其中使用的代码部分是连续的,但感谢您的提醒:线程安全。我最初的意思只是以某种方式修改底层byte []
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2012-12-24
      • 1970-01-01
      • 2012-05-15
      • 2016-06-14
      • 1970-01-01
      相关资源
      最近更新 更多