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.
Prüfen, ob jpg image schon vorhanden ist, bevor es geladen wird
Ich weiss ja nicht, wie du die Datei speicherst, aber per FileIO sollte sich eine Prüfsumme beliebiger Bitbreite wie folgt erstellen lassen.
Java:
FileOutputStream fOut = new FileOutputStream((File) f, false);
InputStream in = url.openStream();
int r;
long sum = 0;
while((r = in.read()) != -1) {
fOut.write(r);
sum += r;
}
in.close();
fOut.close();
Vor dem Laden kannst du evtl. serverseitig per Http-Responsecode (401, 500 usw.) steuern. Da gibt es einen, ich meine das war 200, der den Clienten anweist (besser gesagt vorschlägt) die Datei aus dem Cache zu verwenden.
Habe mal eben ein wenig gegoogelt da ich mich mit Images selber kaum auskenne, vielleicht hilft dir folgende Seite weiter (es werden zwei Methoden zum vergleichen vorgestellt): Klick
Dann schicke dem Server einen HEAD-Request und überlege dir, wie du basierend auf diesen Infos weiter verfährst, soll heißen GET hinterher oder von Platte holen.
Wenn du nicht weißt, was das für infos sind, dann schau mal hier rein: Wikipedia
[OT][OT]Keinen OT philosophie Thread starten, bitte[/OT]
Philosophie? Nein. Eher eine Analogie was den Informationsfluss angeht. Aber zumindest kann man mittlerweile erraten, dass du hier so eine Art Browsercache nachbauen willst.
[/OT]
Du musst einen HTTP-Request absetzen und die Response auswerten z.B. mittels einer [JAPI]HttpURLConnection[/JAPI], welche du (Danke an Spacerat für den Hinweis) mit [JAPI]URL#openConnection()[/JAPI] erhältst.
Also mit URLs lässt sich schon gewaltig etwas anfangen. Nur solltest du nicht die Abkürzung "url.openStream()", sondern "url.openConnection()" verwenden, über welche du dann neben dem Stream noch andere Attribute bekommst. Für das Web dürfte dich dabei HTTPURLConnection interessieren.
@TO
du müsstest eine server-sprache einsetzen die dir auf die selbe weise einen hash berechnet wie die methode mit der du den hash des files bekommst ...
am einfachsten wäre hier wohl MD5 ... besser allerdings natürlich SHA-2 familie ...
du berechnest einfach den hash des files und fragst beim server nach dem aktuellen ...
sind beide identisch > platten cache ...
wenn unterschiedlich > neu vom server laden ...
Dein Freund hierzu heisst ".getLastModified()" der HttpURLConnection sowie .getLastModified/.setLastModified von java.io.File
Vorgehensweise:
1) .getLastModified() des Bilds vom Server holen
2) Wenn Bild nicht auf Platte vorhanden, herunterladen und via File#setLastModified(long) das Dateidatum auf das Datum vom Server setzen
3) Wenn Bild vorhanden, dann prüfen ob das Bild auf der Platte (File#getLastModified()) ein anderes Datum zu HttpURLConnection#getLastModified()) hat. Wenn ja, Bild neu runterladen und Dateidatum setzen.
Alternativ kann man mal mit ifModifiedSince von HttpURLConnection herumspielen wenn man einfach ein GET absetzen will.