arraylist 转byte[] java_Java-ByteBuffer或ArrayList?

最近,我创建了一个包装器,用于将数据读取和写入字节数组.为此,我一直在使用ArrayList< Byte&gt ;,但我想知道这是否是最有效的方法,因为:

> addAll()不适用于字节数组(即使使用Arrays.asList(),它也会向我返回List< Byte []>).为了解决这个问题,我只是循环并在每个循环中添加一个字节,但是我想这需要大量的函数调用,因此会降低性能.

>从ArrayList获取byte []也会发生同样的情况.我无法从Byte []转换为byte [],因此必须使用循环.

>我想存储字节而不是字节会占用更多内存.

我知道ByteArrayInputStream和ByteArrayOutputStream可以用于此目的,但是有一些不便之处:

>我想实现以不同字节顺序读取不同数据类型的方法(例如readInt,readLEInt,readUInt等),而这些类只能读取/写入字节或字节数组.这并不是真正的问题,因为我可以在包装器中修复它.但是这是第二个问题.

>我希望能够同时进行读写操作,因为我正在使用它来解压缩某些文件.因此,要为其创建包装,我需要同时包含ByteArrayInputStream和ByteArrayOutputStream.我不知道它们是否可以某种方式同步化,或者每次写给包装器时都必须将一个的全部数据写到另一个.

因此,我的问题来了:使用ByteBuffer会更有效吗?我知道您可以从中获取整数,浮点数等,甚至可以更改字节顺序.我想知道的是,在使用ByteBuffer和ArrayList< Byte>之间是否存在真正的性能变化.

解决方法:

绝对是ByteBuffer或ByteArrayOutputStream.在您的情况下,ByteBuffer似乎不错.检查Javadoc,因为它具有不错的方法,对于putInt / getInt等,您可能想要设置顺序(这4个字节)

byteBuffer.order(ByteBuffer.LITTLE_ENDIAN);

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

ByteBuffer可以包装字节数组或分配.

标签:bytebuffer,arraylist,java

来源: https://codeday.me/bug/20191028/1949774.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值