# Bilder cachen ?



## The_God (25. Okt 2007)

Hallo Leute!

Vllt. kann mir ja jemand weiterhelfen. Ich habe ein Applet das zum anschauen einer Karte (besteht aus sehr vielen Teilbildern ) dient.
Ich möchte nun jene Bilder die ich vom Webspace geladen habe nicht jedes mal neu laden (wegen traffic), anstatt dessen möchte ich sie cachen, also nicht auf dem localen Rechner ablegen, da ich hier wieder ein zertifikat brauche.
Gibt es eine Möglichkeit diese in einen Cache zu laden, und wenn ja wie geht das ???:L


----------



## Wildcard (25. Okt 2007)

Wo soll der Cache denn sein wenn nicht auf dem lokalen Rechner?


----------



## The_God (25. Okt 2007)

der cache soll schon auf dem lokalen rechner sein, aber die datei sollen nicht in zb. c:\temp\pics geschrieben werden, hierfür bräuchte ich dann ein zertifikat


----------



## Wildcard (25. Okt 2007)

Du brauchst für alles was du auf die Platte packen willst ein Zertifikat.
Oder reden wir hier von der Laufzeit, also das während einer 'Session' die Bilder nicht neu geladen werden müssen?


----------



## Wildcard (25. Okt 2007)

Falls letzteres zutrifft:

```
import java.awt.Image;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;


public class ImageCache {
	
	private static Map<URL, Image> cache = new HashMap<URL, Image>();
	
	public static Image getImage(URL url){
		if(cache.containsKey(cache))
			return cache.get(url);
		Image image = null;
		try {
			image = ImageIO.read(url);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		cache.put(url,image);
		return image;
		
	}

}
```


----------



## The_God (25. Okt 2007)

oh sry. natürlich während der Laufzeit, danach können die Daten wieder weg sein.
ist diese liste durch den xmx der VM begrenzt oder wird das in eine temporäre datei ausgelagert?


----------



## Wildcard (25. Okt 2007)

Ist durch xmx begrenzt. Wenn das Probleme bereitet kannst du den Cache entweder aufbohren, oder SoftReferences verwenden. Webstart ist auch eine alternative wenn du definitiv über die 64MiB gehen willst.


----------



## The_God (25. Okt 2007)

*g* cache aufbohren??? -> der cache kann ja nur durch den besitzer des laufzeitcomputers erhöht werden, oder gibts da eine andere möglichkeit?


----------



## Wildcard (25. Okt 2007)

Ich rede von einem intelligenten Verhalten der Klasse die ich dir geschrieben habe.
Du musst sie so um einen Caching Algorithmus deiner Wahl erweitern der bestimmt wann ein Element aus dem Cache gekickt wird.


----------



## The_God (25. Okt 2007)

klar, kicke das bild aus der liste das ich am unwahrscheinlichsten wieder brauche. der vm-cache bleibt aber konstant.

eine kurze frage noch, kann ich in der laufzeitumgebung den aktuell zur verfügung stehenden speicher abfragen??


----------



## merlin2 (25. Okt 2007)

```
Runtime.freeMemory()
Runtime.maxMemory()
Runtime.totalMemory()
```


----------



## Wildcard (25. Okt 2007)

ja, schau dir die Klasse Runtime an.


----------



## The_God (25. Okt 2007)

besten dank


----------

