我正在读取二进制文件并将每条记录存储到 byte [] 中。现在我想将这些记录收集到Java Vector 中。 (这样它可以无限增长。)但向量需要对象,而不是基元(或基本数组,据我所知)。
是否可以“装箱”一组基元,或者我将不得不重写我的代码以将我的数组转换为数组,将我的字节转换为字节 ?
我尝试将字节连接到字符串,但由于 String.append()将我的字节视为整数并将其转换为倾向,因此失败了到String-y十进制表示!!
答案 0 :(得分:5)
byte[]
是一个Object
(所有数组都是,甚至是原始数组)。没有什么可以阻止您将byte[]
添加到Vector
。
Vector<byte[]> records = new Vector<byte[]>();
byte[] firstRecord = readRecord();
records.add(firstRecord);
虽然它闻起来不像一个好的设计。此外,你应该倾向于绕过List
(接口)而不是传递Vector
(List
的具体实现)。
答案 1 :(得分:1)
您可以将byte []中的所有字节添加到Vector&lt; Byte&gt;通过遍历每个字节。
但是,我不建议您使用Vector,因为它是在Java 1.2(1998)中替换的遗留类
您可以使用ArrayList,但这将使用原始字节[]的4-16倍内存。
如果你不能使用TByteArrayList,我建议你使用ByteArrayOutputStream和ByteArrayInputStream。
答案 2 :(得分:0)
你可以这样做:
byte[] byteArr = new byte[]{0x41, 0x43};
List<byte[]> listBytes = Arrays.asList(byteArr); // to get a list
List<byte[]> list = new Vector<byte[]>(listBytes); // to instantiate a vector
System.out.println(Arrays.toString(list.get(0)));
List<byte[]> l = new Vector<byte[]>(); // to instantiate a vector
l.add(new byte[]{0x51, 0x52});
System.out.println(Arrays.toString(l.get(0)));
[81, 82]
答案 3 :(得分:0)
如果绝对无法将字节转换为字节,那么您可能会查看原始集合库,例如Colt。它是为高性能科学的东西而写的,但它有原始的收集类型,你可以使用。
答案 4 :(得分:0)
我明白你的意思, 是 不可能将某些东西放入Vector或甚至将ArrayList作为一个元素,让我解释一下为什么下面的代码完全正确但我们误解了它
Vector<byte[]> records = new Vector<byte[]>();
byte[] firstRecord = readRecord();
records.add(firstRecord);
此代码的第三行不会将数组放入Vector中,而是将引用firstRecord放入该Vector中。然后,如果我们在将它放入向量后更改firstRecord的内容,那么我们会更改Vector的内容,因为我们有两个对同一事物的引用。