开发者社区> 问答> 正文

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

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

[我的用例是用Java开发的Web应用程序]。 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-09 13:10:29 480 0
1 条回答
写回答
取消 提交回答
  • 实际上,有许多种处理字节的方法。我同意选择最佳的方法并不总是那么容易:

    的 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[]。

    2020-02-09 13:10:44
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载