Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ist es bei RMI irgendwie möglich, den Fortschritt bei einem Aufruf zu ermitteln?
zB wenn ich eine Datei einlese und dessen Inhalt über RMI verschicke, möchte ich den Fortschritt in einer Progress Bar anzeigen.
wie komme ich an die Anzahl der erhaltenen Bytes, wenn das ganze über RMI läuft?
Ich habs jetzt mal mit Sockets probiert.
Also ich hab mir eine eigene SocketKlasse geschrieben, die den SocketInputStream "umhüllt".
In der hab ich die read(byte,int,int) Methode überschrieben.
Ich lese immer nur ein Byte aus dem Stream in das Array.
Im Code sieht das folgendermaßen aus:
Java:
int bytesRead = 0;
for (int i = 0; i < len; i++)
{
bytesRead += super.read(b, i, 1);
}
return bytesRead;
Klappt soweit schon aber ist sehr performance lastig.
Deswegen hab ich mir gedacht ich les immer einen gewissen Teil statt jedes byte einzeln
also quasi so in der Art:
Java:
int bytesRead = 0;
int stepSize = getStepSize();
for (int i = 0; i < len;)
{
bytesRead += super.read(b, i, stepSize);
i+=stepSize;
}
return bytesRead;
In der Methode getStepSize() wird dann berechnet, wie viel ich immer schrittweise auslesen will in Abhängigkeit von der Größe. Also zB wenn die Länge 1000 ist und ich immer prozentweise lesen will. Dann liefert die Methode 10 (1000/100%) zurück.
Klappt aber irgendwie nicht so ganz. Beim ersten Durchlauf scheint noch alles zu gehen aber dann liefert die Methode super.read(...) -1 zurück, was dann früher oder später zu einer IndexOutOfBoundException führt, weil i -1 ist.
also ich weis nicht was ich jetzt anders gemacht habe aber jetzt gehts...
Performance mäßig ist es allerdings immer noch eher schlecht (sehr schlecht:noe
Mit meinem WrapperStream dauert der Transfer(lokal) einer 16MB grossen Datei ca. 17 Sekunden und ohne 94 ms. Also schon gewaltiger Unterschied...
also ich weis nicht was ich jetzt anders gemacht habe aber jetzt gehts...
Performance mäßig ist es allerdings immer noch eher schlecht (sehr schlecht:noe
Mit meinem WrapperStream dauert der Transfer(lokal) einer 16MB grossen Datei ca. 17 Sekunden und ohne 94 ms. Also schon gewaltiger Unterschied...
Was machst du da? Wofür soll der Wrapper gut sein?
Byteweise lesen ist natürlich nicht so performant. Also immer einen bestimmte Menge Daten lesen, wenn vorhanden. Das macht der BufferedInputStream. Die Größe des Puffers kannst du setzen und deinen Bedürfnissen anpassen...
Du wolltest das mit RMI machen. Also frägst du die Größe der Datei explizit ab (eine selbst implementierte Methode) und streamst sie dann zum Client. rmi streaming - Google-Suche