# Byte-Array per for-Schleife schicken



## x46 (30. Dez 2018)

Guten Tag,

ich sende dem Server mit folgendem Code eine Reihe von Arrays. Als Erstes die Anzahl der Arrays und danach die Byte-Arrays:

```
Socket client = new Socket("localhost", 1612);
OutputStream outStream = client.getOutputStream();
ObjectOutputStream ous = new ObjectOutputStream(outStream);
ous.flush();

PrintWriter outP = new PrintWriter(outStream);
outP.println(out.Final_Filebyte.length); // Sende die Anzahl der Elemente
outP.flush();

for (int i = 0; out.Final_Filebyte.length > i; i++) {
  byte[] send = out.Final_Filebyte[i];
  ous.writeObject(send); // sende die Arrays
  ous.flush();
}
```
und empfange die Daten auf dem Server dann mit folgenden Code:

```
ObjectInputStream ois = new ObjectInputStream(inStream);
BufferedReader inS = new BufferedReader(new InputStreamReader(inStream));
String input = inS.readLine();
int leng = Integer.parseInt(input); // erhalte die Anzahl und schreibe sie in ein int

byte[][] bytes = new byte[leng][]; // erstelle das Array wo die Daten hineingeschrieben werden

for (int i = 0; leng > i; i++) {
  outO = ois.readObject();
  byte[] getByte = (byte[]) outO;
  bytes[i] = getByte; // empfange die Daten und speichere sie
}
```

Dabei bekomme ich folgenden Fehler:


```
java.io.EOFException
   at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
   at java.io.ObjectInputStream.readObject0(Unknown Source)
   at java.io.ObjectInputStream.readObject(Unknown Source)
   at sendTest.inWirter.run(inWirter.java:52)
   at java.lang.Thread.run(Unknown Source)
```


Wie kann ich das Problem lösen?

Schon einmal Danke im Voraus.


----------



## httpdigest (30. Dez 2018)

Warum verwendest du denn umständlicherweise einen zusätzlichen PrintWriter und BufferedReader, um die Länge als Text/String zu senden, und nicht stattdessen einfach ObjectOutputStream.writeInt(int)?? Wenn man einmal einen ObjectOutputStream auf einem OutputStream instanziiert hat, sollte man besser nichts anderes mehr zusätzlich auf dem OutputStream tun.
Davon mal abgesehen lässt sich das Ganze viel einfacher lösen (ohne Schleife):

```
// Sender:
OutputStream outStream = client.getOutputStream();
ObjectOutputStream ous = new ObjectOutputStream(outStream);
ous.writeObject(out.Final_Filebyte); // <- sende byte[][] Objekt

// Empfänger:
ObjectInputStream ois = new ObjectInputStream(inStream);
byte[][] bytes = (byte[][]) ois.readObject();
```


----------

