Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何存储字节[]';Java中的向量中有什么?_Java_Arrays_Vector_Byte - Fatal编程技术网

如何存储字节[]';Java中的向量中有什么?

如何存储字节[]';Java中的向量中有什么?,java,arrays,vector,byte,Java,Arrays,Vector,Byte,我正在读取一个二进制文件,并将每条记录存储到一个字节[]。现在我想将这些记录收集到一个Java向量中。(这样它就可以无限增长。)但是向量采用对象,而不是基元(或者基元数组,据我所知) 有没有办法“装箱”一个原语数组,或者我必须重写代码才能将数组变成数组,将字节变成字节 我尝试将字节连接成一个字符串,但失败了,因为字符串.append()倾向于将我的字节视为整数,并将它们转换为字符串-y十进制表示形式 byte[]是一个对象(所有数组都是,甚至是基本数组)。没有任何东西可以阻止您将字节[]添加到向

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

有没有办法“装箱”一个原语数组,或者我必须重写代码才能将数组变成数组,将字节变成字节


我尝试将字节连接成一个字符串,但失败了,因为字符串.append()倾向于将我的字节视为整数,并将它们转换为字符串-y十进制表示形式

byte[]
是一个
对象
(所有数组都是,甚至是基本数组)。没有任何东西可以阻止您将
字节[]
添加到
向量

Vector<byte[]> records = new Vector<byte[]>();
byte[] firstRecord = readRecord();
records.add(firstRecord);
向量记录=新向量();
字节[]firstRecord=readRecord();
记录。添加(第一个记录);

虽然它闻起来不是一个好的设计。此外,您应该更喜欢传递
列表
(接口)而不是传递
向量
(列表的具体实现)。

您可以通过循环每个字节将字节[]中的所有字节添加到向量中

但是,我不建议您使用Vector,因为它是一个遗留类,在Java1.2(1998)中被替换

您可以改为使用ArrayList,但这将使用原始字节[]4-16倍的内存

如果您不能使用TByteArrayList,我建议您使用ByteArrayOutputStream和ByteArrayInputStream。

您可以:

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)));

如果绝对无法将字节转换为字节,则可以查看基本集合库,如。它是为高性能的科学材料编写的,但它有原始的收集类型,你可以使用。

我明白你的意思, 不可能将something数组作为一个元素放入向量甚至ArrayList,让我解释一下为什么下面的代码完全正确,但我们误解了它

Vector<byte[]> records = new Vector<byte[]>();
byte[] firstRecord = readRecord();
records.add(firstRecord);
向量记录=新向量();
字节[]firstRecord=readRecord();
记录。添加(第一个记录);

代码的第三行没有将数组放入向量,而是将引用firstRecord放入该向量。然后,如果我们在将firstRecord放入向量后更改其内容,则会发生的情况是,我们更改向量的内容,因为我们有两个对同一事物的引用。

您是在尝试将
字节[]
转换为
向量
还是转换使用
字节[]的代码
改为用户
向量
?你不想使用
列表
?“或原语数组,据我所知”-你怎么说?你试过了吗?因为你可以,而且它会起作用<代码>列表记录列表=新建ArrayList()不要使用向量。@Gabe:很抱歉搞混了-我想要一个向量@沃尔夫城堡:见下文;我想我已经试过了…不,你真的不能。试试看,看看你得到了什么。@Mark:是的,已经实现并修复了。我很难处理这个列表。我声明了,就像你在第二行所做的那样,但是。。如何将其初始化为空列表?还有,是否可以写入listBytes.add(新字节[]{0x51,0x52})将另一个字节[]添加到列表中?(注意我也问了@Mark类似的问题,如上)@Chap:我看不出你在做什么有什么问题。请参阅上面的更新部分。谢谢-之前我正在尝试列表l=新列表()。。现在我明白了,我必须用一些具体的东西来实现列表接口。+1来回答实际问题。一开始我也误读了它,这正是我想要的:将每个字节[]存储为Vector的一个元素。很抱歉,我原来的帖子不太清楚。我以为我已经尝试过编写向量,但被Eclipse的增量编译器拒绝了。也许是出了什么事,或者我只是记错了。我现在来看看列表和向量。好吧,我被难住了。我声明:列出foo;作为实例变量,但我无法实例化它!我认为问题在于列表只是一个界面,对吗?我不确定此时我必须做什么才能有一个可用的字节数组列表。@第二章:是的,
list
是一个接口。流行的实现有
ArrayList
LinkedList
,实现是您应该实例化的(
List List=new ArrayList()
)。通过多态性,您可以将类的实例分配给任何超类或接口
Vector
也是
List
的一个实现,但是它已经不受欢迎了,因为它有一些遗留的缺点;我将研究Java的这一方面,即将变量声明为简单的接口。(如果可能的话,让我知道如何“信任”您。)Vector没有被替换,它被重构为集合框架的一部分-
从Java 2平台v1.2开始,这个类被改装以实现List接口,使其成为Java集合框架的一员。与新的集合实现不同,Vector是同步的。
@nathansizemore您可以使用Collections.synschronizedList()。Vector是一个遗留集合,因为当有更干净的替代品时。我错了,Java 8文档实际上更新为推荐
ArrayList
[81, 82]
Vector<byte[]> records = new Vector<byte[]>();
byte[] firstRecord = readRecord();
records.add(firstRecord);