gpt4 book ai didi

Java - ByteBuffer 还是 ArrayList

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:02 26 4
gpt4 key购买 nike

最近我创建了一个包装器来将数据读写到 byte 中大批。为此,我一直在使用 ArrayList<Byte> ,但我想知道这是否是最有效的方法,因为:

  • addAll()不适用于 byte数组(甚至使用 Arrays.asList() ,它返回我 List<Byte[]> )。要修复它,我只是循环并添加一个 byte在每个循环中,但我想这假设有很多函数调用,因此它有性能成本。
  • 获取 byte[] 也是如此来自 ArrayList .我无法从 Byte[] 转换至 byte[] ,所以我必须为此使用一个循环。
  • 我想存储字节而不是字节会占用更多内存。

我知道ByteArrayInputStreamByteArrayOutputStream可以用于此,但它有一些不便:

  • 我想实现以不同字节顺序读取不同数据类型的方法(例如 readIntreadLEIntreadUInt 等),而这些类只能读取/写入字节或字节数组.这不是真正的问题,因为我可以在包装器中修复它。但是第二个问题来了。
  • 我希望能够同时写入和读取,因为我正在使用它来解压缩一些文件。因此,要为它创建一个包装器,我需要同时包含 ByteArrayInputStreamByteArrayOutputStream .我不知道这些是否可以通过某种方式同步,或者我每次写入包装器时都必须将一个的全部数据写入另一个。

因此,我的问题来了:会使用 ByteBuffer 吗?更有效率?我知道你可以拿integers , floats等等,甚至能够改变字节顺序。我想知道的是,使用 ByteBuffer 之间是否存在真正的性能变化?和一个 ArrayList<Byte> .

最佳答案

肯定是 ByteBufferByteArrayOutputStream。在你的情况下 ByteBuffer似乎很好。 检查 Javadoc,因为它有很好的方法,对于 putInt/getInt 等,您可能想要设置顺序(这 4 个字节)

byteBuffer.order(ByteBuffer.LITTLE_ENDIAN);

对于文件,您可以使用 getChannel() 或变体,然后使用 MappedByteBuffer

一个 ByteBuffer 可以包装一个字节数组,或者分配。

关于Java - ByteBuffer 还是 ArrayList<Byte>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31453743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com