Hallo,
ich möchte die Möglichkeit anbieten einen InputStream zu einer über Netzwerk verfügbaren Datei zu öffnen.
Der FileInputStream wird auf Serverseite ausgelesen und in den OutputStream eines Sockets geschrieben, der zum Client führt. Der Client hat dann quasi im InputStream des Sockets auf seiner Seite eine Kopie des Inhaltes des ursprünlichen FileInputStreams.
Hier ein Ausschnitt der Methode auf Serverseite:
Das funktioniert auch so. Allerdings gefällt mir daran nicht, dass direkt immer die komplette Datei in den Strom geschrieben wird. Ich vermute, die TCP Pakete kommen dann beim Client an und werden solange irgendwo gepuffert, bis der Strom ausgelesen wird.
Auch wenn der Client nur den Anfang der Datei bräuchte, würde trotzdem Alles übertragen.
Ich möchte nun folgendes erreichen: Es soll immer nur soviel rübergeschickt werden, wie tatsächlich gebraucht wird.
Also in etwa: "Client ruft read auf -> Server ruft read beim FileStream auf und schreibt das in den Socket Stream.
Oder, dass immer eine bestimmte Anzahl Bytes geschickt werden, bis die auf der Gegenseite ausgelesen sind, und erst dann wird neu aus der Datei gelesen und in den Socket Stream geschrieben.
Meine Frage ist nun: Gibt es eine Möglichkeit das ohne zusätzliches Protokoll zu erreichen? - Vielleicht kann man FileInputStream und SocketOutputStream irgendwie koppeln.
ich möchte die Möglichkeit anbieten einen InputStream zu einer über Netzwerk verfügbaren Datei zu öffnen.
Der FileInputStream wird auf Serverseite ausgelesen und in den OutputStream eines Sockets geschrieben, der zum Client führt. Der Client hat dann quasi im InputStream des Sockets auf seiner Seite eine Kopie des Inhaltes des ursprünlichen FileInputStreams.
Hier ein Ausschnitt der Methode auf Serverseite:
Java:
InputStream sourceFileIn = new FileInputStream(fullPath);
/* client ist ein Socket */
OutputStream clientOut = client.getOutputStream();
int bytesReadCount = 0;
while (true)
{
bytesReadCount = sourceFileIn.read(copyBuffer);
if (-1 == bytesReadCount)
{
break;
}
clientOut.write(copyBuffer, 0, bytesReadCount);
}
Das funktioniert auch so. Allerdings gefällt mir daran nicht, dass direkt immer die komplette Datei in den Strom geschrieben wird. Ich vermute, die TCP Pakete kommen dann beim Client an und werden solange irgendwo gepuffert, bis der Strom ausgelesen wird.
Auch wenn der Client nur den Anfang der Datei bräuchte, würde trotzdem Alles übertragen.
Ich möchte nun folgendes erreichen: Es soll immer nur soviel rübergeschickt werden, wie tatsächlich gebraucht wird.
Also in etwa: "Client ruft read auf -> Server ruft read beim FileStream auf und schreibt das in den Socket Stream.
Oder, dass immer eine bestimmte Anzahl Bytes geschickt werden, bis die auf der Gegenseite ausgelesen sind, und erst dann wird neu aus der Datei gelesen und in den Socket Stream geschrieben.
Meine Frage ist nun: Gibt es eine Möglichkeit das ohne zusätzliches Protokoll zu erreichen? - Vielleicht kann man FileInputStream und SocketOutputStream irgendwie koppeln.
Zuletzt bearbeitet: