字节数组和字节缓冲区有什么区别?
另外,在什么情况下应该优先考虑一个?
[我的用例是用 java 开发的 Web 应用程序]。
原文由 Rajat Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议
字节数组和字节缓冲区有什么区别?
另外,在什么情况下应该优先考虑一个?
[我的用例是用 java 开发的 Web 应用程序]。
原文由 Rajat Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
实际上有很多方法可以处理字节。我同意选择最好的并不总是那么容易:
byte[]
java.nio.ByteBuffer
java.io.ByteArrayOutputStream
(结合其他流)java.util.BitSet
byte[]
只是一个原始数组,只包含原始数据。因此,它没有方便的方法来构建或操作内容。A
ByteBuffer
更像是一个建造者。 它创建一个byte[]
。与数组不同,它有更方便的辅助方法。 (例如append(byte)
方法)。就 用法 而言并不是那么简单。 (大多数教程都太复杂或质量很差,但 这个 教程会让你有所收获。更进一步?然后阅读许多 陷阱。)You could be tempted to say that a
ByteBuffer
does tobyte[]
, what aStringBuilder
does forString
.但是ByteBuffer
类有一个具体的区别/缺点。虽然看起来字节缓冲区会在您添加元素时自动调整大小, 但ByteBuffer
实际上具有固定容量。 当您实例化它时,您已经必须指定缓冲区的 最大大小。这就是为什么 我经常更喜欢使用
ByteArrayOutputStream
的原因之一,因为它会自动调整大小, 就像ArrayList
一样。 (它有一个toByteArray()
方法)。有时 将其包装在DataOutputStream
中很实用。 优点是您将有一些额外的便利调用,(例如writeShort(int)
如果您需要写入 2 个字节。)BitSet
当你想执行位级操作时派上用场。 您可以获取/设置各个位,并且它具有逻辑运算符方法,例如xor()
。 (toByteArray()
方法仅在 Java 7 中引入。)当然,根据您的需要,您可以将所有这些组合起来构建您的
byte[]
。