2014-11-04 77 views
0

在此代码中,循环完成后,数组在每个地方都填充相同的值。经过一些调试后,我注意到在每个add()中,数组都被完全填充为相同的值。列表<byte[]>填写错误

List<byte[]> datas = new ArrayList<byte[]>(); 

// CODE ... // 

FileInputStream fis = new FileInputStream(file); 
byte[] buff = new byte[2]; 
int n; 
while((n=fis.read(buff))!=-1){ 
    this.datas.add(buff); 
} 
fis.close(); 

我试着用String数组相同的代码,它工作正常...

这究竟是为什么,以及如何解决呢?

+0

我猜你是不改变字节的内部,而 – 2014-11-04 19:10:28

回答

1

您正在使用byte [] buff变量的相同实例填充ArrayList。所以每次你修改buff(在fis.read(buff)中)你实际上都在修改ArrayList中的所有项目。

尝试在每个iteartion创建一个新的byte []:

List<byte[]> datas = new ArrayList<byte[]>(); 

// CODE ... // 

FileInputStream fis = new FileInputStream(file); 
byte[] buff = new byte[2]; 
int n 
while((n=fis.read(buff))!=-1){ 
    this.datas.add(buff); 
    buff = new byte[2]; 
} 
fis.close(); 
+0

谢谢!!!!!!!它非常完美!我真的没有想到! – omaflak 2014-11-04 19:13:26

+0

不客气:)。如果您发现它有用,请将答案标记为已接受。 – JML 2014-11-04 19:19:23