如何在Java中的Vector中存储byte []?

时间:2011-06-22 18:33:41

标签: java arrays vector byte

我正在读取二进制文件并将每条记录存储到 byte [] 中。现在我想将这些记录收集到Java Vector 中。 (这样它可以无限增长。)但向量需要对象,而不是基元(或基本数组,据我所知)。

是否可以“装箱”一组基元,或者我将不得不重写我的代码以将我的数组转换为数组,将我的字节转换为字节

我尝试将字节连接到字符串,但由于 String.append()将我的字节视为整数并将其转换为倾向,因此失败了到String-y十进制表示!!

5 个答案:

答案 0 :(得分:5)

byte[]是一个Object(所有数组都是,甚至是原始数组)。没有什么可以阻止您将byte[]添加到Vector

Vector<byte[]> records = new Vector<byte[]>();
byte[] firstRecord = readRecord();
records.add(firstRecord);

虽然它闻起来不像一个好的设计。此外,你应该倾向于绕过List(接口)而不是传递VectorList的具体实现)。

答案 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的内容,因为我们有两个对同一事物的引用。