字节数组和字节缓冲区有什么区别?
另外,在什么情况下应该优先选择其中之一?
[我的用例是用 java 开发的 Web 应用程序]。
实际上有多种处理字节的方法。我同意,选择最好的并不总是那么容易:
- the
byte[]
- the
java.nio.ByteBuffer
- the
java.io.ByteArrayOutputStream
(与其他流结合)
- the
java.util.BitSet
The byte[]
只是一个原始数组,仅包含原始数据。因此,它没有方便的方法来构建或操作内容。
A ByteBuffer
更像是一个建造者。它创建了一个byte[]
。与数组不同,它有更方便的辅助方法。 (例如append(byte)
方法)。就以下方面而言并不是那么简单usage http://tutorials.jenkov.com/java-nio/buffers.html. (大多数教程都太复杂或质量很差,但是这个one https://www.novixys.com/blog/java-nio-using-bytebuffer/会带你去某个地方。更进一步吗?然后阅读许多pitfalls https://worldmodscode.wordpress.com/2012/12/14/the-java-bytebuffer-a-crash-course/.)
你可能会想说ByteBuffer
确实byte[]
,什么是StringBuilder
做为String
。但有一个具体的区别/缺点ByteBuffer
班级。尽管在添加元素时字节缓冲区可能会自动调整大小,the ByteBuffer
实际上有固定的容量。当你实例化它时,你已经必须指定最大尺寸缓冲区。
这就是原因之一,为什么我经常喜欢使用ByteArrayOutputStream
因为它会自动调整大小,就像一个ArrayList
做。 (它有一个toByteArray()
方法)。有时很实用,把它包裹在一个DataOutputStream
.优点是您将有一些额外的便利电话(例如writeShort(int)
如果你需要写2个字节。)
BitSet
当您想要执行位级操作时会派上用场。您可以获取/设置各个位,并且它具有逻辑运算符方法,例如xor()
. (The toByteArray()
方法仅在 java 7 中引入。)
当然,根据您的需求,您可以将它们全部组合起来构建您的byte[]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)