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

2024-04-10

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

[我的用例是用 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(使用前将#替换为@)

何时使用字节数组&何时使用字节缓冲区? 的相关文章

随机推荐

  • Leaflet.js:如何从地图中删除多个图层

    我正在使用 Leaflet js 制作地图 现在我想从地图中删除添加的图层 通过单击输入 按钮 所有选中的复选框将更改为未选中 并且所有相应的图层将从地图中删除 要从地图中删除图层 需要该图层的 ID 该 id 等于相应复选框的 id 这就
  • 如何使用 mysqli 准备好的语句绑定 N 个参数?

    在旧的 mysql 代码中 我有一个完美运行的查询 如下所示 questioncontent isset GET questioncontent GET questioncontent searchquestion questioncont
  • 如何检测用户何时成功完成php中文件的下载

    我有一个处理文件下载请求的 php 页面 我需要能够检测文件何时已成功下载 如何才能做到这一点 也许有一些方法可以检测该客户端 然后向服务器发送确认 Thanks 编辑 通过句柄 我的意思是该页面正在执行以下操作 file var www
  • Android - 应用程序安装在 SD 卡上时内部存储与外部存储

    我有一个可以下载大量内容的应用程序 用户之间有所不同 但可能是 200mb 到 1GB 或更多 目前 我将所有这些内容保存在外部存储上 因为这可能是空间最多的区域 例如 SD 卡 这在大多数情况下都可以正常工作 但在某些情况下这不一定是理想
  • Clojure 是否有命名私有函数的约定?

    当我在 Clojure 中定义私有函数时 我通常使用 前缀作为视觉指示符 表明该函数不能在我的命名空间之外使用 例如 defn name let formatter formatter yyyy MM dd HH mm ss SSSS fo
  • HTML5 push/replaceState 和 标签导致安全异常

    我有一个网站的测试版本 位于正常网站的子域中 例如 http test x com http test x com代替http x com http x com 我用标签将所有资源请求转换回原始域 在我实现 HTML5 Push repla
  • 对象或原始类型

    有人可以向我解释一下在 JAVA 中如何使用 Integer Boolean 等来代替它们的原始类型吗 我似乎无法理解他们提供的优势 它们似乎在处理空值时造成了不必要的问题 Thanks Boolean Integer Long 是对象 您
  • android ndk 未定义对方法的引用

    您好 很抱歉这篇长文章我正在尝试编译一些静态类 即 jsmn c json c 和 buf c 它们是我从下载的 jsmn json 库的一部分https github com alisdair jsmn example downloads
  • 如何使用spark-submit为Spark作业选择队列?

    有没有办法提供参数或设置来选择我希望运行 Spark submit 作业的队列 通过使用 queue 因此 火花提交作业的一个示例是 Spark submit master YARN conf Spark executor memory 4
  • Dash 数据表下载至 Excel

    我目前正在使用下面的脚本从我创建的破折号下载数据表 下载工作正常 但是当我在本地托管 Dash 并尝试通过另一个系统单击下载按钮时 文件正在主机上下载 而不是在用户计算机上下载 如果我的问题看起来很愚蠢 我深表歉意 因为我对 Dash 和
  • scala 中可以有命名常量吗?

    看起来 Java 中的注释需要常量 我想做 object ConfigStatics final val componentsToScan Array com example PropertySource ConfigStatics com
  • 由于 lambda 表达式,缩小失败

    当 ASP NET 捆绑程序尝试缩小以下脚本时 它会失败 Minification failed Returning unminified contents 164 59 60 run time error JS1195 Expected
  • 为什么改变 SO_RCVBUF 的值不起作用?

    我正在制作一个程序 它创建一个原始套接字以读取所有流量 在调用socket 和recvfrom 之间 最后一个在循环中从缓冲区中取出所有数据包 我等待了5秒 当我运行该程序时 我使用 hping3 命令以 更快的模式 以快速填充缓冲区 向我
  • ASP.Net MVC Ajax.BeginForm OnComplete 在 Razor 视图中传递 C# 参数

    我在 MVC c Razor 视图中有以下代码 string url Projects MonthRangesScriptsPartial using Ajax BeginForm MonthRanges Projects new id V
  • SQL Server 的 SELECT JOIN 语句导致的死锁

    当执行带有两个表的 JOIN 的 SELECT 语句时 SQL Server 似乎 分别锁定语句的两个表 例如通过像这样的查询 这 SELECT FROM table1 LEFT JOIN table2 ON table1 id table
  • 求 O(log n) 中值

    问题是我们如何找到整数值接收流的中位数 例如 对于 12 14 252 243 15 中位数是 15 O log N 其中 N 是值的数量 请注意 我们有一个整数值流 因此通过接收每个值 我们必须重新找到中位数 例子 Input media
  • 如何修复 Nodejs 中的“无法读取未定义的属性推送”错误?

    我编写了一个简单的应用程序来学习 Nodejs 但是当我在 cmd 中运行 nodemon index js 时出现此错误 类型错误 无法读取未定义的属性 push 应用程序崩溃 启动前等待文件更改 我已遵循 udemy 课程中的所有说明来
  • C 可变长度数组存储持续时间

    On this http en cppreference com w c language storage duration网站上有以下段落 强调我的 自动存储时间 当进入声明对象的块时分配存储空间 并在通过任何方式 goto return
  • 从 PHP 中检索 Javascript 中的 JSON 数组

    我试图从 PHP 返回一个 json 编码的数组到 JS 我之前已经这样做过很多次了 但现在我遇到了一个奇怪的错误 我成功获取数据并且它在 chrome 中显示数组 但是 如果我指定了 我无法让它进入AJAX成功功能dataType jso
  • 何时使用字节数组&何时使用字节缓冲区?

    字节数组和字节缓冲区有什么区别 另外 在什么情况下应该优先选择其中之一 我的用例是用 java 开发的 Web 应用程序 实际上有多种处理字节的方法 我同意 选择最好的并不总是那么容易 the byte the java nio ByteB