# byte[] über BufferedReader auslesen



## x46 (5. Dez 2018)

Guten Tag.

Dieser Code geht leider nicht (das am Pfeil):
---------------------------------------------------------------------
InputStream inStream = connection.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inStream));
byte[] bytesArray = in.read(); // <---
-----------------------------------------------------------------------
Wie kann ich über einen _BufferedReader_ ein _byte_-Array auslesen (der _InputStream_ ist von einen Server-Client-Programm)?


----------



## fhoffmann (5. Dez 2018)

Alle "Reader"-Klassen sind für Texte gemacht. Mit einem BufferedReader kannst du nur ein char[] lesen.
Wenn du wirklich ein byte[] benötigst, solltest du einen BufferdInputStream nehmen.


----------



## x46 (5. Dez 2018)

fhoffmann hat gesagt.:


> benötigst, solltest du einen BufferdInputStream nehmen



wie würde das den dann aussehen


----------



## mrBrown (5. Dez 2018)

Fabian321 hat gesagt.:


> Wie kann ich über einen _BufferedReader_ ein _byte_-Array auslesen


Gar nicht. Reader sind für Text-Basiertes einlesen.

Brauchst du den ganzen Stream auf einmal in einem byte-Arrays (bzw, was willst du danach mit dem Array machen)?


----------



## x46 (5. Dez 2018)

mrBrown hat gesagt.:


> was willst du danach mit dem Array machen


Datei erstellen 

wie würde das den dann aussehen


----------



## mrBrown (5. Dez 2018)

Verzichte auf byte-Arrays und nutz die vorhandenen APIs: `Files.copy(inStream, filePath)`


----------



## x46 (5. Dez 2018)

mrBrown hat gesagt.:


> Verzichte auf byte-Arrays und nutz die vorhandenen APIs: Files.copy(inStream, filePath)


was muss den beim inStream ankommen? die Bytes ?


----------



## mrBrown (5. Dez 2018)

`inStream` ist der InpuStream aus deinem obigen Code.


----------



## x46 (5. Dez 2018)

ja aber was muss bei dem InpuStream ankommen? also auch Bytes oder


----------



## mrBrown (5. Dez 2018)

In einem InputStream kommen immer bytes an, was auch sonst?


----------



## x46 (5. Dez 2018)

mrBrown hat gesagt.:


> inStream ist der InpuStream aus deinem obigen Code.


File f = new File("test.zip");
                Files.copy(inStream, f.toPath());
also so ? oder ?


----------



## mrBrown (5. Dez 2018)

Ja.


----------



## x46 (5. Dez 2018)

mrBrown hat gesagt.:


> Ja


das geht nicht

    at java.nio.file.Files.copy(Unknown Source)
    at java.nio.file.Files.copy(Unknown Source)
    at x46.Server.Server_in.run(Server_in.java:61)

Zeile 61 ->  Files.copy(inStream, f.toPath());


----------



## mrBrown (5. Dez 2018)

Den interessanten Teil der Exception hast du leider weggelassen


----------



## x46 (5. Dez 2018)

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.nio.file.Files.copy(Unknown Source)
    at java.nio.file.Files.copy(Unknown Source)
    at x46.Server.Server_in.run(Server_in.java:61)
    at java.lang.Thread.run(Unknown Source)


----------



## mrBrown (5. Dez 2018)

Fabian321 hat gesagt.:


> java.net.SocketException: Connection reset


Deine Verbindung wurde geschlossen, bevor die Datei geschrieben wurde.

Zeig doch mal deinen ganzen Code, vielleicht liegt da irgendwo ein Fehler.


----------



## x46 (5. Dez 2018)

//-------------------Server-----------------------------------------------------------------------------

```
// server starten
            ServerSocket server01 = new ServerSocket(16102);
            System.out.println("Warte auf clients auf dem Port " + server01.getLocalPort());
            // --------------------------------------------------------------
            while (true) {
                // connection aktiviren
                Socket connection = server01.accept();
                System.out.println("Client verbingung unter: " + connection.getRemoteSocketAddress());
              
                // -------------------------------------------------------------------
                // strems
                // out
                OutputStream outStream = connection.getOutputStream();
                PrintWriter out = new PrintWriter(outStream);
                ObjectOutputStream oos = new ObjectOutputStream(outStream);
                // in
                InputStream inStream = connection.getInputStream();
                BufferedReader in = new BufferedReader(new InputStreamReader(inStream));
              
                // ------------------------------------------------------------
              
                //Path path = Paths.get("test.zip");
                File f = new File("test.zip");
                Files.copy(inStream, f.toPath());

            }
          
        } catch (IOException e) {
            e.printStackTrace();
        }
```


//-----------------------------Client------------------------------------------------------------------------

```
// client starten und verbinden
        Socket client;
        try {
            client = new Socket("localhost", 16102);
            // strems
            // out
            OutputStream outStream = client.getOutputStream();
            PrintWriter out = new PrintWriter(outStream);
      
            // in
            InputStream inStream = client.getInputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(inStream));
          
            // ------------------------------------------------------------
            File file = new File("send.zip");
            // init array with file length
            byte[] bytesArray = new byte[(int) file.length()];
              FileInputStream fis = new FileInputStream(file);
              fis.read(bytesArray); //read file into bytes[]
              fis.close();
      
            out.print(bytesArray);
            out.flush();
          
        } catch (IOException e) {
            e.printStackTrace();
        }
```


----------



## mrBrown (5. Dez 2018)

Du schreibst die Daten mit einem Writer, ein Writer schreibt Daten allerdings als Text, was für eine zip-Datei eher ungeeignet ist.

Verzichte auf den Writer und nimm den OutputStream direkt, am besten in Verbindung mit `Files.copy(file.toPath(), outStream)`


----------



## x46 (5. Dez 2018)

mrBrown hat gesagt.:


> Verzichte auf den Writer und nimm den OutputStream direkt, am besten in Verbindung mit Files.copy(file.toPath(), outStream)


hab ich gemacht
Also:
`outStream.write(bytesArray);
              outStream.flush();`
und jetzt hab ich den Error

java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.nio.file.Files.copy(Unknown Source)
    at java.nio.file.Files.copy(Unknown Source)
    at x46.Server.Server_in.run(Server_in.java:61)
    at java.lang.Thread.run(Unknown Source)


----------

