Streams

Isa_Hope

Mitglied
Hallo :)
Ich habe bei folgender Aufgabe ein Problem bzw verstehe nicht so ganz wie ich vorgehen soll:
ich habe eine Methode public void druckeDaten() die die Eigenschaften zu von mir erstellten Objekten auf der Konsole ausgibt. nun soll ich diese Methode ändern und durch eine Methode voi druckeDaten(OutputStream stream) ersetzen, die allerdings genau dasselbe Ergebnis liefern soll (Ausgabe auf der Konsole). Ich verstehe aber nicht genau was ich jetzt machen soll und warum ich einen Stream als Parameter benutzen soll.
Ich hoffe jemand kann mir helfen :)
Vielen Dank schonmal
 

httpdigest

Top Contributor
Der OutputStream Parameter erlaubt dann natürlich die Ausgabe woanders hin als nur auf die Konsole per System.out.println (wie bisher vermutlich). Das heißt, die Methode wird allgemeiner.
Weitere Ausgaben außer die Konsole könnten etwa sein:
- in eine Datei (per FileOutputStream)
- in einen Netzwerksocket (per OutputStream des Socket)
- (letztlich alles, was eine OutputStream Schnittstelle bereitstellt)
Und, da das Feld System.out ein PrintStream ist, welcher praktischerweise von OutputStream erbt, kannst du dann aufrufen druckeDaten(System.out).
Oder eben druckeDaten(fileOutputStream) oder druckeDaten(socketOutputStream), etc.
 

Isa_Hope

Mitglied
Vielen dank, irgendwie kam ich damit ganz durcheinander (hab die Vorlesung dazu verpennt). Ist es dann richtig, dass ich in der Methode das System.out.print durch stream.write ersetzen muss?
 

httpdigest

Top Contributor
Um die Implementierung der existierenden Methode möglichst wenig ändern zu müssen - natürlich darfst du nicht mehr direkt System.out.println() schreiben, das sollte klar sein - würde ich mir einen java.io.PrintStream aus dem übergebenen OutputStream erzeugen (per Konstruktor). Dann kannst du dieselben Methoden (println, print, etc.) darauf aufrufen wie du es vorher auf dem System.out Objekt getan hast.
 

Times

Bekanntes Mitglied
Ich nehme an in deiner druckeDaten() Methode steht ewas wie
Code:
System.out.println("Hallo Welt");
richtig?

Der Outputstream ist in diesem Falle das Object hinter "System.out".
Du könntest deine zweite druckeDaten(Outputstream out) also mit "System.out" als Parameter aufrufen.
Code:
druckeDaten(System.out)

Dem Outputstream Object in der Methode kannst du nun alle deine Ausgaben mitteilen, wie du es auch bei deiner ersten druckeDaten() Methode getan hast.
Achtung: Methoden wie print(), println() gibt es im Standard Outputstream nicht.
Alternativ kannst du die Methode "write(byte[] bytes)" des Outputstreams aufrufen, wodurch du selbiges erreichen solltest.

Code:
out.write("Hallo Welt".getBytes());
Hinweis: Du wirst feststellen das ein write alleine nicht ausreicht. Wenn du all deine Daten ausgegeben (geschrieben) hast, solltest du noch die Methode "flush()" an dem Outputstream Objekt aufrufen.

Was bringt dir das ganze?
Du bist nicht gezwungen deine druckeDaten() in der Konsole ausgeben zu lassen. Stattdessen kannst du auch ein Outputstream zu einer Datei übergeben um diese Datei zu beschreiben.

Hoffe habe dein Anliegen richtig verstanden

Grüße
Times

Edit: Sorry, war zu lahm :p
 

Isa_Hope

Mitglied
Ich nehme an in deiner druckeDaten() Methode steht ewas wie
Code:
System.out.println("Hallo Welt");
richtig?

Der Outputstream ist in diesem Falle das Object hinter "System.out".
Du könntest deine zweite druckeDaten(Outputstream out) also mit "System.out" als Parameter aufrufen.
Code:
druckeDaten(System.out)

Dem Outputstream Object in der Methode kannst du nun alle deine Ausgaben mitteilen, wie du es auch bei deiner ersten druckeDaten() Methode getan hast.
Achtung: Methoden wie print(), println() gibt es im Standard Outputstream nicht.
Alternativ kannst du die Methode "write(byte[] bytes)" des Outputstreams aufrufen, wodurch du selbiges erreichen solltest.

Code:
out.write("Hallo Welt".getBytes());
Hinweis: Du wirst feststellen das ein write alleine nicht ausreicht. Wenn du all deine Daten ausgegeben (geschrieben) hast, solltest du noch die Methode "flush()" an dem Outputstream Objekt aufrufen.

Was bringt dir das ganze?
Du bist nicht gezwungen deine druckeDaten() in der Konsole ausgeben zu lassen. Stattdessen kannst du auch ein Outputstream zu einer Datei übergeben um diese Datei zu beschreiben.

Hoffe habe dein Anliegen richtig verstanden

Grüße
Times

Edit: Sorry, war zu lahm :p

also meine Methode sieht so aus:
public void druckeDaten(OutputStream stream){
System.out.println( "ID = " + super.getId() +
" " + super.getTitel() + " aufgenommen im Jahr "
+ super.getJahr() + " in " + getOrt());

}

mit stream.write(usw) funktioniert das aber nicht. soll in der Klammer hinter alles was in Anführungszeichen steht ein .getBytes()? und was soll das mit dem flush bringen? :)
 

httpdigest

Top Contributor
Um die Implementierung der existierenden Methode möglichst wenig ändern zu müssen - natürlich darfst du nicht mehr direkt System.out.println() schreiben, das sollte klar sein - würde ich mir einen java.io.PrintStream aus dem übergebenen OutputStream erzeugen (per Konstruktor). Dann kannst du dieselben Methoden (println, print, etc.) darauf aufrufen wie du es vorher auf dem System.out Objekt getan hast.

EDIT:
Java:
public void druckeDaten(OutputStream stream) {
  PrintStream ps = new PrintStream(stream, true);
  ps.println("ID = " + super.getId() + " " + super.getTitel() + " aufgenommen im Jahr " + super.getJahr() + " in " + getOrt());
}
 
Zuletzt bearbeitet:

Times

Bekanntes Mitglied
Der Methode "write" des Outputstreams kann als Parameter kein String übergeben werden. Dieser erwartet eine byte-Menge. Es handelt sich hierbei um eine ganz einfache Art des Streams, daher ist dieser recht einfach gehalten.

Das "Hallo Welt".getBytes() wandelt den String "Hallo Welt" in ein Byte-Array um.

Das "flush" am Ende sagt dem Stream Objekt das es die übermittelten Daten nun fest schreiben soll.
Schau dir hierzu besser die JavaDocs zu flush() an. Da steht es ganz schön beschrieben!

Docs zu Outputstream: https://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html

Deine Methode sollte also nach Abschluss in etwa so aussehen:
Code:
public void druckeDaten(OutputStream stream) {
        String text = "ID = " + super.getId() +" " + super.getTitel() + " aufgenommen im Jahr " + super.getJahr() + " in " + getOrt();
        byte[] byteData = text.getBytes();
        stream.write(byteData);
        stream.flush();
    }
 

Isa_Hope

Mitglied
EDIT:
Java:
public void druckeDaten(OutputStream stream) {
  PrintStream ps = new PrintStream(stream, true);
  ps.println("ID = " + super.getId() + " " + super.getTitel() + " aufgenommen im Jahr " + super.getJahr() + " in " + getOrt());
}

oh ja, entschuldige, ich wollte erst mal gucken was ein PrintStream macht :D aber habe es jetzt genau so und es funktioniert ^-^ Vielen Dank!
 

Isa_Hope

Mitglied
Der Methode "write" des Outputstreams kann als Parameter kein String übergeben werden. Dieser erwartet eine byte-Menge. Es handelt sich hierbei um eine ganz einfache Art des Streams, daher ist dieser recht einfach gehalten.

Das "Hallo Welt".getBytes() wandelt den String "Hallo Welt" in ein Byte-Array um.

Das "flush" am Ende sagt dem Stream Objekt das es die übermittelten Daten nun fest schreiben soll.
Schau dir hierzu besser die JavaDocs zu flush() an. Da steht es ganz schön beschrieben!

Docs zu Outputstream: https://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html

Deine Methode sollte also nach Abschluss in etwa so aussehen:
Code:
public void druckeDaten(OutputStream stream) {
        String text = "ID = " + super.getId() +" " + super.getTitel() + " aufgenommen im Jahr " + super.getJahr() + " in " + getOrt();
        byte[] byteData = text.getBytes();
        stream.write(byteData);
        stream.flush();
    }


Okay, auch dir vielen Dank!
 

Isa_Hope

Mitglied
Ich habe noch eine Frage! :) Der nächste Teil meiner Aufgabe ist es die daten in eine Datei zu schreiben mithilfe der Methode druckeDaten. Dazu brauch ich ja den FileOutputStream, richtig? Wo muss ich den hintun? :D
 

httpdigest

Top Contributor
Also: Der FileOutputStream is ja auch nur ein OutputStream, genau wie der PrintStream, der in System.out steht.
Du solltest sehr gut in der Lage sein, selber zu wissen, was jetzt zu tun ist. Oder hast du die gesamte Vorlesung verschlafen? ;)
 

Isa_Hope

Mitglied
Also: Der FileOutputStream is ja auch nur ein OutputStream, genau wie der PrintStream, der in System.out steht.
Du solltest sehr gut in der Lage sein, selber zu wissen, was jetzt zu tun ist. Oder hast du die gesamte Vorlesung verschlafen? ;)

ich war wie gesagt die gesamte Vorlesung nicht da :D
darf ich hier noch eine Frage dazu stellen? Ich habs jetzt fast :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Parallel Streams Java Basics - Anfänger-Themen 18
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
M Streams Java Basics - Anfänger-Themen 34
M Streams filter Java Basics - Anfänger-Themen 15
M generate Methode für Streams Java Basics - Anfänger-Themen 6
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
B Collections Streams - Hilfestellung bei komplexer Struktur Java Basics - Anfänger-Themen 9
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
N Frage zu Streams Java Basics - Anfänger-Themen 3
U Input/Output Unterschiede Streams Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
C Methoden Sortieren mit Streams: Auf- und absteigend Java Basics - Anfänger-Themen 2
O Streams und die flush Methode Java Basics - Anfänger-Themen 3
P InputStream eines Musik-Streams abspielen Java Basics - Anfänger-Themen 2
M Input/Output Streams Java Basics - Anfänger-Themen 5
T Klassen wie funktionieren Streams, warum bekomme ich int zurück? Java Basics - Anfänger-Themen 2
J Java 8 Streams - Frage zu "reduce" Java Basics - Anfänger-Themen 6
Sogomn Input/Output Reader, Writer und Streams Java Basics - Anfänger-Themen 6
T Fehler mit Streams! Java Basics - Anfänger-Themen 2
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
I Java Streams Java Basics - Anfänger-Themen 6
R Streams for runaways Java Basics - Anfänger-Themen 5
RySa Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind. Java Basics - Anfänger-Themen 2
D Input/Output streams und readLine() Java Basics - Anfänger-Themen 3
firefexx Input/Output close() bei mehreren Streams Java Basics - Anfänger-Themen 5
M Frage zu Streams Java Basics - Anfänger-Themen 9
C try finally - Streams schließen Java Basics - Anfänger-Themen 7
M Streams und Sockets Java Basics - Anfänger-Themen 3
M file löschen, streams evtl noch offen Java Basics - Anfänger-Themen 7
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
S Piped Streams / Threads Java Basics - Anfänger-Themen 6
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
P Streams mit Sockets Java Basics - Anfänger-Themen 7
V Performance Lesen und Schreiben aus/in Streams Java Basics - Anfänger-Themen 4
C RandomAccessFile vs. Streams Java Basics - Anfänger-Themen 5
M Probleme mit den Streams Java Basics - Anfänger-Themen 2
G streams schließen Java Basics - Anfänger-Themen 2
P Fragen zu STreams Java Basics - Anfänger-Themen 5
M Streams Java Basics - Anfänger-Themen 4
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
? Streams Java Basics - Anfänger-Themen 2
R RandomAccessFile mit anderen Streams verbinden Java Basics - Anfänger-Themen 5
G Rekursionsaufgabe mit Streams Java Basics - Anfänger-Themen 5
J Problem mit Streams Java Basics - Anfänger-Themen 15
L Streams und Reader/Writer Java Basics - Anfänger-Themen 8
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M Streams, read and write Java Basics - Anfänger-Themen 2
M Streams Java Basics - Anfänger-Themen 2
B Streams wollen scheinbar nicht schließen Java Basics - Anfänger-Themen 6
S Umwandlung eines Character-Streams in ein Image Java Basics - Anfänger-Themen 17
E Probleme mit Streams Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben