【发布时间】:2015-07-16 12:08:23
【问题描述】:
最近我创建了一个包装器来读取和写入数据到byte 数组中。为此,我一直在使用ArrayList<Byte>,但我想知道这是否是最有效的方法,因为:
-
addAll()不适用于byte数组(即使使用Arrays.asList(),它返回我List<Byte[]>)。为了解决这个问题,我只是循环并在每个循环中添加一个byte,但我想这会假设有很多函数调用,因此会降低性能。 - 从
ArrayList获取byte[]也是如此。我无法从Byte[]转换为byte[],所以我必须使用循环。 - 我想存储 Byte 而不是 byte 会占用更多内存。
我知道ByteArrayInputStream 和ByteArrayOutputStream 可以用于此,但它有一些不便:
- 我想实现以不同字节顺序读取不同数据类型的方法(例如,
readInt、readLEInt、readUInt等),而这些类只能读取/写入字节或字节数组.这不是一个真正的问题,因为我可以在包装器中修复它。但是第二个问题来了。 - 我希望能够同时读写,因为我正在使用它来解压缩一些文件。所以要为它创建一个包装器,我需要同时包含
ByteArrayInputStream和ByteArrayOutputStream。我不知道这些是否可以以某种方式同步,或者我每次写入包装器时都必须将一个的全部数据写入另一个。
所以,我的问题来了:使用ByteBuffer 会更有效吗?我知道您可以从中获取integers、floats 等,甚至可以更改字节顺序。我想知道的是,使用 ByteBuffer 和 ArrayList<Byte> 之间是否存在真正的性能变化。
【问题讨论】:
-
ArrayList<Byte>听起来不是个好主意。 -
如果你需要动态大小的缓冲区,那么看看我的评论,使用 ByteArrayOutputStream,扩展它并利用fileds buf 和count,做一些快速阅读的方法。它具有冒险性,具有动态大小;
标签: java arraylist bytebuffer