Importer Exporter

dj

Mitglied
Hi! Wir müssen in einer Übung eine Musikverwaltung schreiben. Jedoch gab es zur Ein / Ausgabe eine spezielle Vorgabe:

"Das Musik-Verwaltungssystem soll die Mo ̈glichkeit anbieten, Importer und Exporter in das System zu integrieren und diese zum Laden der Datenbank bzw. zur Abspeicherung und Ausgabe auf dem Bildschirm zu nutzen. Beispielsweise verwendet die Bildschirm- ausgabe einen Exporter und setzt dazu den Ausgabestrom auf die Konsole. Im Falle einer Dateiausgabe wu ̈rde der Ausgabestrom lediglich auf eine Datei umgelenkt. Der große Vorteil dieser Designentscheidung liegt darin, dass die grundlegenden Datenhaltungs- klassen nicht mit unno ̈tig vielen Routinen versehen werden und auch nicht kompiliert werden mu ̈ssen, wenn ein neues Ausgabe- oder Importformat integriert wird. Weiterhin erfordert ein neuer Importer oder Exporter auch keine A ̈nderungen am Sourcecode der Datenhaltungsklassen der Musik-Verwaltung. Das System ist besonders flexibel, wenn Drittanbieter Importer oder Exporter erstellen und integrieren mo ̈chten.
Vom Auftraggeber wird der Sourcecode fu ̈r einen Importer bereitgestellt. Die folgenden Schnittstellendefinitionen liegen vor:"

Java:
public interface Importer { 
public Musik[] read(InputStream is, Object benutzerDaten)
throws IOException;
}
public interface Exporter { 
public void write(Musik m, OutputStream os, Object benutzerDaten)
throws IOException;
}

Hab mir dass so gedacht, dass ich eine Transferklasse schreibe welche beide Interfaces implementiert und die Ein / Ausgabe übernimmt. Ich habe allerdings keine Ahnung was ich mit den übergebenen Parametern anfangen soll. Vor Allem OutputStream / InputStream und Object kann ich nicht zuordnen.
Welchen Sinn hat es einen OutputStream zu übergeben?
Bin für jeden Tipp dankbar!
 

dj

Mitglied
Damit du weißt wohin du die Daten schreiben sollst bzw. woher du die Daten lesen kannst. Woher soll ein Drittanbieter denn sonnst wissen, wo die Daten abgelegt werden sollen.

Sowas in der Art hab ich mir auch schon überlegt. Wollte das dann so lösen:
Java:
if (os instanceof FileOutputStream) {
//dann in eine Datei schreiben
}
if (os instanceof PrintWriter) {
//auf Konsole ausgeben
}

Bin mir da allerdings nicht wirklich sicher ob das sinnvol ist.
 

faetzminator

Gesperrter Benutzer
Nein, nicht ganz ;) Die Klassen [c]InputStream[/c] bzw. [c]OutputStream[/c] besitzen alle notwendigen Methoden. Du kannst aber immer noch einen [c]Writer[/c] darüber hängen. Hier ein kleines Beispiel:

Java:
public void write(OutputStream os, String someString) throws IOException {
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
    bw.write(someString);
    bw.newLine();
    bw.flush();
}

public void foo() throws FileNotFoundException, IOException {
    write(new FileOutputStream(new File("someFile.txt")), "teste mich!");
}
 

langhaar!

Bekanntes Mitglied
Sowas in der Art hab ich mir auch schon überlegt. Wollte das dann so lösen:
Java:
if (os instanceof FileOutputStream) {
//dann in eine Datei schreiben
}
if (os instanceof PrintWriter) {
//auf Konsole ausgeben
}

Ne. Der Clou des übergebenen OutputStreams ist ja gerade, dass du die Daten schreibst und der Übergeber bestimmt, wohin geschrieben wird. Ob Drucker, Bildschirm, in eine Datei oder sonstwohin, brauchst du weder zu implementieren, noch geht es dich etwas an. Du verwendest nur wie im Beispiel gezeigt die vorhandenen Methoden.
 

Oben