Filter für Input UND OutputStream

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hallo,

ich bastle gerade an einer Art Filter. Dieser soll einen OutputStream vor dem Senden auf dem Netzwerk "bearbeiten" und nach dem empfangen auf der anderen Seite den InputStream wieder in die Ursprungsform vor dem "bearbeiten" zurückverwandeln...

Nochmal anders veranschaulicht:

Code:
Senden:
OutputStream den die Applikation verwendet ---write---> Filter der den Stream bearbeitet ---write---> OutputStream des Netzwerks

Empfangen:
InputStream des Netzwerks <---read--- Filder der den Stream wieder zurück bearbeitet <---read--- InputStream den die Applikation verwendet
Die Problematik liegt jetzt darin, dass ich eigtl nur mit Streams arbeiten möchte. D.h. ich verkette die Streams einfach. Ein Schreibvorgang am einen Ende, zieht sich durch bis zum anderen. Mit dem lesen genau so.

So, ich muss also InputStreams und OutputStreams behandeln können. Dafür möchte ich nicht zwingend Zwei klassen schreiben. Eine Klasse wäre mir am liebsten.

Problem ist: Ich kann ja nur einmal erben, entweder von InputStream oder von OutputStream.
Hat jemand ne Idee wie ich mit nur einer Klasse beide Fälle abdecke? Über den Konstruktur könnt ich ja sagen "in welche Richtung" es geht. Aber wie stell ich's am geschicktesten an dass meine Filterklasse sowohl den Typ "InputStream" als auch "OutputStream" unterstützt?
 
B

Beni

Gast
Du könntest eine kleine Factory bauen:

Also zuerst sowas:
Code:
public class Filter{
  public int filter( int x ){
    return ...
  }

  public OutputStream out( OutputStream out ){
    return new FilterOutputStream( out ){
      public void write( int b ){
        super.write( filter( b ));
      }
    }
  }


  public InputStream in( InputStream in ){
    return new FilterInputStream( in ){
      public int read(){
        return filter( super.read() );
      }
    }
  }
}

Und später:
Code:
Filter filter = new Filter();
OutputStream out = ...
out = filter.out( out );
out.write( ... );
(FilterInput/OutputStream sind Klassen der Standard-Library)
 
T

tuxedo

Gast
Ja, das wäre meine nächste Lösung gewesen. Und so werd ich's auch machen. Alles andere verkompliziert den Code nur unnötig.

Danke,

Alex
 
T

tuxedo

Gast
Wenn ich jetzt verschiedene Filter haben möchte, muss ich mir ne Basis schaffen. Was wäre da am geschicktesten? Abstrakte Klasse? Normale Klassen von denen geerbt werden muss? Oder Interfaces? Oder ne Mischung aus beidem?

Bisher sieht's so aus:

Code:
import java.io.InputStream;
import java.io.OutputStream;

public class Filter {
	
	public Filter(){
		// TODO Hier das FilterSetup machen
	}
	
	public InputStream getInputStream(InputStream in){
		return new InputStreamFilter(in);
	}
	
	public OutputStream getOutputStream(OutputStream out){
		return new OutputStreamFilter(out);
	}

}

Code:
import java.io.IOException;
import java.io.InputStream;

public class InputStreamFilter extends InputStream {

	private InputStream mIn;
	
	/**
	 * vorgelagerten Stream übernehmen
	 * @param in
	 */
	public InputStreamFilter(InputStream in) { 
		mIn = in;
	}

	@Override
	public int read() throws IOException {
		// TODO: lesen von mIn, bearbeiten und dann via return zurückgeben
		return mIn.read();
	}

}

Code:
import java.io.IOException;
import java.io.OutputStream;

public class OutputStreamFilter extends OutputStream {

	private OutputStream mOut;
	
	/**
	 * vorgelagerten Stream übernehmen
	 * @param out
	 */
	public OutputStreamFilter(OutputStream out) {
		mOut = out;
	}

	@Override
	public void write(int b) throws IOException {
		// TODO b bearbeiten und in mOut rein schreiben
		mOut.write(b);
	}

	
	
}

Kann mir jemand ein paar Vorschläge machen wie ich die Struktur möglichst geschickt als Basis für verschiedene Filterimplementierungen auslege?

- Alex
 
T

tuxedo

Gast
Ich bin doch selbst auf ne schicke Lösung gekommen:

Hier meine abstrakten Basis-Klassen:

Der Filter an sich:
Code:
import java.io.InputStream;
import java.io.OutputStream;

public abstract class Filter {
	
	public abstract InputStream getInputStream(InputStream in);
	
	public abstract OutputStream getOutputStream(OutputStream out);

}

Und die zu erzeugenden Streams:

Code:
import java.io.IOException;
import java.io.InputStream;

public abstract class InputStreamFilter extends InputStream {

	private InputStream mIn;
	
	/**
	 * vorgelagerten Stream übernehmen
	 * @param in
	 */
	public InputStreamFilter(InputStream in) { 
		mIn = in;
	}

	@Override
	public int read() throws IOException {
		return process(mIn.read());
	}
	
	protected abstract int process(int b);

}

Code:
import java.io.IOException;
import java.io.OutputStream;

public abstract class OutputStreamFilter extends OutputStream {

	private OutputStream mOut;
	
	/**
	 * vorgelagerten Stream übernehmen
	 * @param out
	 */
	public OutputStreamFilter(OutputStream out) {
		mOut = out;
	}

	@Override
	public void write(int b) throws IOException {
		// TODO b bearbeiten und in mOut rein schreiben
		mOut.write(b);
	}
	
	protected abstract int process(int b);

	
	
}

Jetzt muss ich nur für jeden Filter 2 Dinge tun:

1) Für die Filter-Factory von "Filter" erben und in den zwei Methoden die dazu passende implementierung der gefilterten Streams zurückgeben
2) Zwei Klassen erstellen die einmal von "InputStreamFilter" und "OutputStreamFilter" ergeben. Darin reicht's dann einfach die "process" Methode zu implementieren. Fertig...

Oder hat jemand ne besseren Vorschlag?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Sessions + Filter Netzwerkprogrammierung 2
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
FrankenDerStein Socket UDP Multithreading für ein Port Netzwerkprogrammierung 2
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
F Server für Java Applikationen Netzwerkprogrammierung 16
B Webview für Anwendung Netzwerkprogrammierung 7
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
J Netty umsetzung für ein Protokoll Netzwerkprogrammierung 1
J ERM für kleine Verwaltungsdatenbank Netzwerkprogrammierung 2
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
Messoras Launcher für mein Spiel Netzwerkprogrammierung 7
F Einfaches Gateway für Log-Files Netzwerkprogrammierung 1
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
P PPTP Protokoll für JAVA Netzwerkprogrammierung 14
T FTP Wie Notwendigkeit für "rekey" klientenseitig detektieren? Netzwerkprogrammierung 3
S Webserver für Jar File Netzwerkprogrammierung 4
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
M Erreichbar für alle zu sein Netzwerkprogrammierung 9
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
N Selbes URL Objekt für alle Requests nutzen Netzwerkprogrammierung 7
T uberspace.de als (v)root-Ersatz für kleinere Java-Anwendungen? Netzwerkprogrammierung 12
L Proxy für Dateidownload? Netzwerkprogrammierung 3
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Leitstelle für Funkspiel Netzwerkprogrammierung 8
F Java-Beispielcode für Zeroconf (ähnlich Apple Bonjour) Netzwerkprogrammierung 7
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
N RMI Einstellungen für "übers Internet" Netzwerkprogrammierung 8
F SSL-Zertifikate für viele Nutzer? Netzwerkprogrammierung 8
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
S wie stell man die classpath für JARs? Netzwerkprogrammierung 3
M Bestimmte Klassen für Netzwerkchecks gesucht Netzwerkprogrammierung 11
M ClassLoader für Axis2 setzen Netzwerkprogrammierung 15
M Welches Speicherformat für News-Database?? Netzwerkprogrammierung 2
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
P Proxy für Anwendung setzten Netzwerkprogrammierung 3
T Bezeichner "end of line" für die Funktion readline Netzwerkprogrammierung 5
A DataGramsocket Übertragungsproblem im Internet (IPs für Voip) Netzwerkprogrammierung 5
E Userliste für Chat Applet Netzwerkprogrammierung 4
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
F Netzwerkprogrammierung für Anfänger Netzwerkprogrammierung 2
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
B Variablen ausrichten für Übertragung Netzwerkprogrammierung 2
D FTP Pfadangabe für ftp-upload funktioniert nicht Netzwerkprogrammierung 5
K Getrennte Rechner für RMI-Server/RMI-Registry, bzw. Alternativen? Netzwerkprogrammierung 5
dayaftereh HTTPCleint und HTMLparser für hTTpBot Netzwerkprogrammierung 2
E Socket Client-Applikation mit GUI für Internet IO-Platine Netzwerkprogrammierung 2
0din Grundlage für Bluetooth Netzwerkprogrammierung 5
N "Jungfernflug" der Socketprogrammierung für ein Mühlespiel Netzwerkprogrammierung 8
F Empfehlung für embedded Webserver Netzwerkprogrammierung 10
W Bibliothek für Certificate Management Protocol (CMP) Netzwerkprogrammierung 3
O Client/Server für Ticker Netzwerkprogrammierung 2
J Stubs für SOAP-Webservice generieren. Ich bekomme es einfach nicht hin... Netzwerkprogrammierung 3
dayaftereh Bester Stream für ein Spiel? Netzwerkprogrammierung 15
data89 Sockets: ein alter Hut - für Euch - für mich nicht! Netzwerkprogrammierung 10
G FileDialog für FTP Client Netzwerkprogrammierung 2
P Welches Protokoll für RMI verwenden? Netzwerkprogrammierung 10
H RCON Tool für Gameserver Netzwerkprogrammierung 11
A Wichtig für einen Chat? Netzwerkprogrammierung 4
D Was für Verbindungen mit Socket möglich? Netzwerkprogrammierung 2
S Realisierung eines Netzwerkcodes für ein Strategiespiel Netzwerkprogrammierung 7
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
W Was für ein Stream soll ich verwenden? Netzwerkprogrammierung 8
A Rezept für Webservices Netzwerkprogrammierung 5
I unc pfad für die klasse file? Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
T Welches Netzwerk ist am bestern für. Netzwerkprogrammierung 2
G server für mein spiel. Netzwerkprogrammierung 5
M Log In Programm für Seiten Netzwerkprogrammierung 2
G Netzwerkprogrammierung für spiele Netzwerkprogrammierung 2
A IRC-Server für das lokale Netzwerk? Netzwerkprogrammierung 12
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
S Server für Internetspiel Netzwerkprogrammierung 2
G Objecte für Kommunikation nutzen Netzwerkprogrammierung 2
J Java Programm für Upload von Dateien per HTTP Netzwerkprogrammierung 7
S Voreinstellungen für JavaMail Netzwerkprogrammierung 2
S Idee für Projekt auf Agentenbasis Netzwerkprogrammierung 8
S Suche API für einfachen HTTP-Zugriff. Netzwerkprogrammierung 17
G benötige Beispiel für parallel ablaufende Threads Netzwerkprogrammierung 3
M RMI - Ein Objekt für Alle? Netzwerkprogrammierung 5
Z Protokoll für Schiffeversenken Netzwerkprogrammierung 5
T Kann man jeden Port für Programm verwenden? Netzwerkprogrammierung 2
R proxy für java anwendung angeben [resolved] Netzwerkprogrammierung 15
B Wie Router einstellen für CLient-Server-Programm? Netzwerkprogrammierung 4
R PPTP Protokoll für JAVA Netzwerkprogrammierung 3
Icewind Klasse für DNS Anfragen Netzwerkprogrammierung 14
P Welche Art von Sockets für ein Spiel? Netzwerkprogrammierung 3
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3
D beste Methode für Datenübertragung ? Netzwerkprogrammierung 1
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
M Socket kein Input Netzwerkprogrammierung 8
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
H Input-/OutputStream Frage Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben