字节数组和字节缓冲区有什么区别? 另外,在什么情况下应优先选择另一种?
[我的用例是用Java开发的Web应用程序]。 问题来源于stack overflow
实际上,有许多种处理字节的方法。我同意选择最佳的方法并不总是那么容易:
的 byte[] 的 java.nio.ByteBuffer 的java.io.ByteArrayOutputStream(与其它流组合) 的 java.util.BitSet 的byte[]仅仅是一个原始阵列,只是包含的原始数据。因此,它没有用于构建或处理内容的便捷方法。
A ByteBuffer更像是建造者。它创建一个byte[]。与数组不同,它具有更方便的辅助方法。(例如append(byte)方法)。在用法上并不是那么简单。(大多数的教程是太复杂或质量较差,但是这一个会得到你的地方。把它一步?然后阅读有关的诸多陷阱。)
你可能会倾向于说,一个ByteBuffer不给byte[],什么StringBuilder做的String。但是ByteBuffer该类存在特定的差异/缺点。就像使用数组,该ByteBuffer有一个固定的大小。因此,在实例化它时,您已经必须指定缓冲区的大小。
这就是原因之一,为什么我经常喜欢使用,ByteArrayOutputStream因为它会像an ArrayList一样自动调整大小。(它有一个toByteArray()方法)。有时将其包装在实用DataOutputStream。这样做的好处是,您将获得一些其他的便捷调用(例如,writeShort(int)如果您需要写入2个字节)。
BitSet当您要执行位级操作时,它会派上用场。您可以获取/设置各个位,并且具有类似的逻辑运算符方法xor()。(该toByteArray()方法仅在Java 7中引入。)
当然,根据您的需求,您可以结合所有这些来建立您的byte[]。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。