字节列表中的整数列表

问题描述 投票:0回答:3

我有一个LinkedList ,它的大小很大(3912984或更大),我想将这些元素复制到字节数组中。整数是0或1,所以我不需要更改数组的大小,我只想一一复制元素,确切地说是如何复制。当然,我知道最简单的方法是:

 for(int i = 0; i < list.size(); i++)      
 array[i] = (byte)(int) list.get(i);

但是这种方法太慢了,我的程序在几个小时之前还没有结束!您是否可以知道另一种方式(更快,例如.NET的Buffer.BlockCopy()之类的),或者我必须更改数据结构?

java arrays list integer bytearray
3个回答
1
投票

Number类中有byteValue()方法可用。数字以整数,双精度,浮点数等形式扩展。

List<Integer> list = getNumbers();

Iterator<Integer> iterator = list.iterator();

while(iterator.hasNext())
{
   Integer i = iterator.next()
   byteArray[index] = i.byteValue();
}

您还可以使用java.nio.MappedByteBuffer类进行块复制。参见http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html

MappedByteBuffer等效于.NET中的Buffer.BlockCopy()


0
投票
// example input list
List<Integer> list = new LinkedList<Integer>();
list.add(1);
list.add(0);
list.add(1);
list.add(0);
list.add(1);
list.add(1);

// write to byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(baos);
for (int element : list) {
    out.writeUTF(Integer.toString(element));
}
byte[] bytes = baos.toByteArray();

// read from byte array
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DataInputStream in = new DataInputStream(bais);
while (in.available() > 0) {
    String element = in.readUTF();
    System.out.println(element);
}

0
投票

使用Java 8的另一种方法:

List<Integer> enteros = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toList());
Byte[] bytes = enteros.stream().map(entero -> entero.byteValue()).toArray(Byte[]::new);
© www.soinside.com 2019 - 2024. All rights reserved.