# ArrayList byte[] abspeichern



## richiking (8. Feb 2012)

Folgendes Problem:


```
ArrayList<byte[]> fin = new ArrayList<byte[]>();

try 
    	{ 
    	  FileOutputStream fos = new FileOutputStream( "test.bin" );
    	  for(int i=0;i<fin.size();i++)
    	  {
    		  byte[] data =fin.get(i);
    		  fos.write(data);
    		  
    	  }
    	  fos.close();
    	} 
    	catch ( IOException e ) { System.err.println( e ); }
```

Ich möchte eine ArrayList gefüllt mit byte-Arrays in ein BIN-File abspeichern... es wird auch was abgespeichert nur leider wiederholt sich immer wieder dieselbe "zeile"

z.B.:
ae b9 00 00 08 00 f6 ff 1c 01 00 00 00 00 08 02 00 00 d3 ff 23 00 09
ae b9 00 00 08 00 f6 ff 1c 01 00 00 00 00 08 02 00 00 d3 ff 23 00 09
.
.
.

Es scheint so als würde er immer nur ein byte-Array abspeichern... was mache ich falsch?


----------



## SlaterB (8. Feb 2012)

es sieht viel eher danach aus, als hättest du in der Liste mehrfach dasselbe nur eine byte[],
gib alles erstmal mit System.out.println() aus, die Datei spielt vorerst keine Rolle

wenn du die Liste befüllst, darfst du nicht dasselbe eine byte[] mehrfach setzen und einfügen,
erstelle jeweils neues Array-Objekt

----

eine kürzere Schleife wäre hier übrigens:

```
for(byte[] data : fin)  {
   fos.write(data);
}
```


----------



## richiking (8. Feb 2012)

Also eine Ausgabe findet statt über:


```
buffer.get(realdata);  // realdata = byte[24]
System.out.println(Arrays.toString(realdata));                        
fin.add(realdata);
```

Das ganze arbeitet in einer while schleife solange halt daten vom inputstream daherkommen... 

Consolen-Ausgabe:

[-82, -71, 0, 0, 8, 0, -10, -1, 28, 1, 0, 0, 0, 0, 8, 2, 0, 0, -45, -1, 35, 0, 9, 0]
[11, -70, 0, 0, 13, 0, -14, -1, 29, 1, 10, 0, 8, 0, 7, 2, 0, 0, -45, -1, 34, 0, 11, 0]
.
.
usw...


----------



## SlaterB (8. Feb 2012)

das muss kein Widerspruch sein,
du gibst die jeweils eingelesenen Daten direkt aus, da sind sie noch richtig,
aber danach werden die arrays alle noch verändert, eben weil sie ein und dasselbe Array sind,
hier ein Beispielprogramm:

```
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        byte[] b = new byte[1];
        List<byte[]> list = new ArrayList<byte[]>();
        for (int i = 0; i < 5; i++)
        {
            // b = new byte[1];
            b[0] = (byte)i;
            System.out.println("b: " + Arrays.toString(b));
            list.add(b);
        }
        System.out.println("Liste: ");
        for (byte[] c : list)
        {
            System.out.println("c: " + Arrays.toString(c));
        }
    }
}
```
Ausgabe:

```
b: [0]
b: [1]
b: [2]
b: [3]
b: [4]
Liste: 
c: [4]
c: [4]
c: [4]
c: [4]
c: [4]
```

die auskommentierte Zeile korrigiert es,
richtige Komplettlösung hier von mir  falls ich die richtige Ursache ertippt habe


----------



## richiking (8. Feb 2012)

Danke! War tatsächlich das Problem obwohl ichs noch nicht 100%-ig verstehe funktioniert es jetzt 


Vielen Dank!

lg, richi


----------

