Input und Output Streams Aufgabe

DrBronko

Mitglied
Guten Morgen und weil es beim ersten Mal so gut lief, wollte ich fragen, ob das eine effiziente Lösung ist?

Aufgabe:
1706092109462.png

Lösung:
Java:
package Aufgabe10;

import java.io.*;

public class EinAusgabeStroeme {

    private long kopiere(InputStream inStream, OutputStream outStream, long anzahlBytes) throws IOException {

        byte[] buf = new byte[(int) anzahlBytes];
        int length;
        while ((length = inStream.read(buf)) != -1) {
            outStream.write(buf, 0, length);
        }
        return anzahlBytes;
    }
}
 

mihe7

Top Contributor
Nö. Stell Dir vor, ich übergebe z. B. ((long)Integer.MAX_VALUE)+1 als dritten Parameter. Dann ist (int) anzahlBytes was? Unabhängig davon: würdest Du es als effizient erachten, ggf. erst mal ein Array mit 1 GB zu erzeugen, um in dieses einen Content von 100 Bytes einzulesen?
 
Zuletzt bearbeitet:

DrBronko

Mitglied
Ich habe jetzt die Lösung:

Java:
    public static long kopiere(InputStream inStream, OutputStream outStream, long anzahlBytesGefordert) throws IOException {
        byte[] puffer = new byte[4096];
        long anzahlBytesKopiert = 0;
        int anzahlGeleseneBytes;

        while ((anzahlGeleseneBytes = inStream.read(puffer)) != -1 && anzahlBytesKopiert < anzahlBytesGefordert) {
            long anzahlBytesAusstehend = Math.min(anzahlBytesGefordert - anzahlBytesKopiert, anzahlGeleseneBytes);
            outStream.write(puffer, 0, (int) anzahlBytesAusstehend);
            anzahlBytesKopiert += anzahlBytesAusstehend;
        }

        return anzahlBytesKopiert;
    }
 

Neue Themen


Oben