ProgressBar auf BufferedOutput- & -InputStream

Status
Nicht offen für weitere Antworten.

zubi

Aktives Mitglied
Hallo,

ich möchte für den FileTransfer zwischen zwei Clients je einen ProgressBar anzeigen lassen. Um den aktuellen wert des Bars festzulegen, lese ich beim Sender den OutputStream aus, d.h., ich addiere alle geschriebenen ints auf, und übergeben dann den Wert:
Code:
socket = new Socket(address, port);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream outFile = new BufferedOutputStream(socket.getOutputStream());
int i;
while ((i = in.read()) != -1) {
     outFile.write(i);

     progressFile.updateBar(size += i);
}

Beim Empfänger sieht's genau so aus, nur lese ich hier den InputStream aus:
Code:
BufferedOutputStream outFile = new BufferedOutputStream(new FileOutputStream(file));
BufferedInputStream inStream = new BufferedInputStream(socket.getInputStream());
int i;
while ((i = inStream.read()) != -1) {
     outFile.write(i);
     progressFile.updateBar(size += i);
}

Das Problem liegt bei der Anzeige: egal wie gross die gesendete Datei ist: der ProgressBar geht viel zu schnell hoch und stimmt mit der Übertragung nicht überein.

Weiss jemand woran das liegen könnte?

Danke & Gruss
zubi
 
R

Roar

Gast
ne das kann so ja nicht gehen...
int i ist der wert der übertragen wird, also kannst du den wert nicht auf die progressBar raufaddieren.
ich würde es folgendermaßen machen:
1. die länge der datei in bytes auslesen ( File#length() )
2. die länge ganz am anfang des outputStreams scheriben, damit der empfänger weiß wie viel bytes er empfangen muss.
3. die übergibst der ProgressBar die anzahl der bytes als maximalwert, und bei jedem geschrieenem byte addierst du 1 auf die progressBar.
beim empfänger:
1. das erste byte was er empfängt muss dann die anzahl der zu empfangenden folgenden bytes sein. die übergibt er wieder an seine progressBar, und für jeden gelesenen byte wird die progressBar um 1 inkrementiert.
 

zubi

Aktives Mitglied
jo stimmt, mein überlegungsfehler.
die grösse hab' ich bereits mit length() übertragen, wenn ich jetzt noch inkrementiere funktioniert die sache!

herzlichen dank!

gruss,
zubi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
windl InputStream cachen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
M Socket InputStream liest nicht vollständig Netzwerkprogrammierung 7
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
F JSch - inputstream is closed Netzwerkprogrammierung 13
M Socket InputStream sendet ausgaben von OutputStream zurück Netzwerkprogrammierung 2
D Inputstream to Outputstream Netzwerkprogrammierung 3
M InputStream and ObjectInputStream zur gleichen Zeit Netzwerkprogrammierung 11
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
MQue Inputstream Timeout Netzwerkprogrammierung 2
S Servlet InputStream leer?! Netzwerkprogrammierung 14
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
P Inputstream "verfügbar" Netzwerkprogrammierung 4
G JPG im InputStream Netzwerkprogrammierung 2
A InputStream liest immer komplettes PHP-Script Netzwerkprogrammierung 6
A InputStream ließt nur 65536 Zeichen anstatt ganzer Puffer Netzwerkprogrammierung 8
A inputstream teilen? Netzwerkprogrammierung 4
D InputStream (Socket) mit BufferedInputStream puffern Netzwerkprogrammierung 2
M Sockets und InputStream Netzwerkprogrammierung 8
R Client nimmt den Inputstream nicht an Netzwerkprogrammierung 5
S Mail anhang in InputStream packen Netzwerkprogrammierung 5
M InputStream - Bytes gehen verloren? Netzwerkprogrammierung 3
E Problem bei Sockets/InputStream über externe Klasse Netzwerkprogrammierung 5
André B. In einen InputStream schreiben? Netzwerkprogrammierung 6
G inputstream hat plötzlich weniger inhalt Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben