2014-11-04 63 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