gpt4 book ai didi

java - 何时使用字节数组和何时使用字节缓冲区?

转载 作者:IT老高 更新时间:2023-10-28 20:22:12 25 4
gpt4 key购买 nike

字节数组和字节缓冲区有什么区别?
另外,在什么情况下应该优先选择一个?

[我的用例是用 java 开发的 Web 应用程序]。

最佳答案

实际上有很多方法可以处理字节。而且我同意选择最好的并不总是那么容易:

  • byte[]
  • java.nio.ByteBuffer
  • java.io.ByteArrayOutputStream(与其他流结合)
  • java.util.BitSet

byte[] 只是一个原始数组,只包含原始数据。因此,它没有方便的方法来构建或操作内容。

ByteBuffer 更像是一个构建器。它创建了一个byte[]。与数组不同,它有更方便的辅助方法。 (例如 append(byte) 方法)。就 usage 而言,这并不是那么简单。 . (大多数教程都太复杂或质量差,但这个 one 会让你有所收获。更进一步?然后阅读更多的 pitfalls。)

您可能会说 ByteBufferbyte[] 的作用,就像 StringBuilderString 。但是 ByteBuffer 类有一个特定的区别/缺点。虽然看起来字节缓冲区会在您添加元素时自动调整大小,但 ByteBuffer 实际上具有固定容量。 当您实例化它时,您已经必须指定 缓冲区的最大大小

这就是为什么我经常更喜欢使用 ByteArrayOutputStream 的原因之一,因为它会自动调整大小,就像 ArrayList 一样。 (它有一个 toByteArray() 方法)。有时将其包装在 DataOutputStream 中很实用。 优点是您将有一些额外的便利调用,例如 writeShort(int)如果你需要写 2 个字节。)

BitSet 当您想要执行位级操作时会派上用场。 您可以获取/设置单个位,它具有逻辑运算符方法,例如 xor ()。 (toByteArray() 方法仅在 java 7 中引入。)

当然,根据您的需要,您可以将所有这些组合起来构建您的 byte[]

关于java - 何时使用字节数组和何时使用字节缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com