Java 字节数组中的整数列表

Java 字节数组中的整数列表,java,arrays,list,integer,bytearray,Java,Arrays,List,Integer,Bytearray,我有一个大(3912984或更多)的链接列表,我想在字节数组中复制这些元素。整数是0或1,所以我不需要改变数组的大小,我只想一个接一个地复制元素,精确地复制它们。当然,我知道最简单的方法是: for(int i = 0; i < list.size(); i++) array[i] = (byte)(int) list.get(i); for(int i=0;i0){ String元素=in.readUTF(); 系统输出打印项次(元素); } //示例输入列表 列表=新

我有一个大(3912984或更多)的链接列表,我想在字节数组中复制这些元素。整数是0或1,所以我不需要改变数组的大小,我只想一个接一个地复制元素,精确地复制它们。当然,我知道最简单的方法是:

 for(int i = 0; i < list.size(); i++)      
 array[i] = (byte)(int) list.get(i);
for(int i=0;i
但是这个方法太慢了,我的程序不会在几个小时前结束!您能知道另一种方法(更快,类似于.NET的Buffer.BlockCopy()或我必须更改数据结构吗?

数字类中有byteValue()方法可用。数字扩展为整数、双精度、浮点等

List<Integer> list = getNumbers();

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

while(iterator.hasNext())
{
   Integer i = iterator.next()
   byteArray[index] = i.byteValue();
}
List List=getNumbers();
迭代器迭代器=list.Iterator();
while(iterator.hasNext())
{
整数i=iterator.next()
字节数组[index]=i.字节值();
}
您还可以使用
java.nio.MappedByteBuffer
类进行块复制。看

MappedByteBuffer相当于.NET中的Buffer.BlockCopy()

Number类中有byteValue()方法可用。数字扩展为整数、双精度、浮点等

List<Integer> list = getNumbers();

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

while(iterator.hasNext())
{
   Integer i = iterator.next()
   byteArray[index] = i.byteValue();
}
List List=getNumbers();
迭代器迭代器=list.Iterator();
while(iterator.hasNext())
{
整数i=iterator.next()
字节数组[index]=i.字节值();
}
您还可以使用
java.nio.MappedByteBuffer
类进行块复制。看

MappedByteBuffer相当于.NET中的Buffer.BlockCopy()

Number类中有byteValue()方法可用。数字扩展为整数、双精度、浮点等

List<Integer> list = getNumbers();

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

while(iterator.hasNext())
{
   Integer i = iterator.next()
   byteArray[index] = i.byteValue();
}
List List=getNumbers();
迭代器迭代器=list.Iterator();
while(iterator.hasNext())
{
整数i=iterator.next()
字节数组[index]=i.字节值();
}
您还可以使用
java.nio.MappedByteBuffer
类进行块复制。看

MappedByteBuffer相当于.NET中的Buffer.BlockCopy()

Number类中有byteValue()方法可用。数字扩展为整数、双精度、浮点等

List<Integer> list = getNumbers();

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

while(iterator.hasNext())
{
   Integer i = iterator.next()
   byteArray[index] = i.byteValue();
}
List List=getNumbers();
迭代器迭代器=list.Iterator();
while(iterator.hasNext())
{
整数i=iterator.next()
字节数组[index]=i.字节值();
}
您还可以使用
java.nio.MappedByteBuffer
类进行块复制。看

MappedByteBuffer相当于.NET中的Buffer.BlockCopy()

//示例输入列表
列表=新建LinkedList();
增加第(1)款;
列表。添加(0);
增加第(1)款;
列表。添加(0);
增加第(1)款;
增加第(1)款;
//写入字节数组
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
DataOutputStream out=新的DataOutputStream(BAS);
for(int元素:列表){
out.writeUTF(整数.toString(元素));
}
byte[]bytes=baos.toByteArray();
//从字节数组读取
ByteArrayInputStream bais=新的ByteArrayInputStream(字节);
DataInputStream in=新的DataInputStream(BAI);
while(in.available()>0){
String元素=in.readUTF();
系统输出打印项次(元素);
}
//示例输入列表
列表=新建LinkedList();
增加第(1)款;
列表。添加(0);
增加第(1)款;
列表。添加(0);
增加第(1)款;
增加第(1)款;
//写入字节数组
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
DataOutputStream out=新的DataOutputStream(BAS);
for(int元素:列表){
out.writeUTF(整数.toString(元素));
}
byte[]bytes=baos.toByteArray();
//从字节数组读取
ByteArrayInputStream bais=新的ByteArrayInputStream(字节);
DataInputStream in=新的DataInputStream(BAI);
while(in.available()>0){
String元素=in.readUTF();
系统输出打印项次(元素);
}
//示例输入列表
列表=新建LinkedList();
增加第(1)款;
列表。添加(0);
增加第(1)款;
列表。添加(0);
增加第(1)款;
增加第(1)款;
//写入字节数组
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
DataOutputStream out=新的DataOutputStream(BAS);
for(int元素:列表){
out.writeUTF(整数.toString(元素));
}
byte[]bytes=baos.toByteArray();
//从字节数组读取
ByteArrayInputStream bais=新的ByteArrayInputStream(字节);
DataInputStream in=新的DataInputStream(BAI);
while(in.available()>0){
String元素=in.readUTF();
系统输出打印项次(元素);
}
//示例输入列表
列表=新建LinkedList();
增加第(1)款;
列表。添加(0);
增加第(1)款;
列表。添加(0);
增加第(1)款;
增加第(1)款;
//写入字节数组
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
DataOutputStream out=新的DataOutputStream(BAS);
for(int元素:列表){
out.writeUTF(整数.toString(元素));
}
byte[]bytes=baos.toByteArray();
//从字节数组读取
ByteArrayInputStream bais=新的ByteArrayInputStream(字节);
DataInputStream in=新的DataInputStream(BAI);
while(in.available()>0){
String元素=in.readUTF();
系统输出打印项次(元素);
}

使用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);
List enteros=Stream.of(1,2,3,4,5).collect(Collectors.toList());
Byte[]bytes=enteros.stream().map(entero->entero.byteValue()).toArray(Byte[]::new);
下面是另一个测试转换时间的复杂示例:

List<Integer> enteros = new LinkedList<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");

System.out.println("Init list: " + LocalTime.now().format(formatter));
// Fill array with 0 and 1
for(int i = 0; i < 9999999; i++) enteros.add(ThreadLocalRandom.current().nextInt(0, 2));
System.out.println("List complete: " + LocalTime.now().format(formatter));

System.out.println("Init list convert: " + LocalTime.now().format(formatter));
Byte[] bytes = enteros.stream().map(entero -> entero.byteValue()).toArray(Byte[]::new);
System.out.println("End convert! " + LocalTime.now().format(formatter));
List enteros=newlinkedlist();
DateTimeFormatter formatter=模式的DateTimeFormatter.of(“HH:mm:ss”);
System.out.println(“初始列表:+LocalTime.now().format(格式化程序));
//用0和1填充数组
对于(inti=0;i<999999;i++)enteros.add(ThreadLocalRandom.current().nextInt(0,2));
System.out.println(“列表完成:”+LocalTime.now().format(格式化程序));
System.out.println(“初始化列表转换:”+LocalTime.now().format(格式化程序));
Byte[]bytes=enteros.stream().map(entero->entero.byteValue()).toArray(Byte[]::new);
System.out.println(“结束转换!”+LocalTime.now().format(格式化程序));

使用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);
List enteros=Stream.of(1,2,3,4,5).collect(Collectors.toList());
Byte[]bytes=enteros.stream().map(entero->entero.byteValue()).toArray(Byte[]::new);
<