Comment remplacer la méthode removeEldestEntry pour enregistrer l'entrée la plus ancienne dans le fichier? Aussi comment limiter la taille d'un fichier comme je l'ai fait dans LinkedHashMap. Voici le code:removeEldestEntry overriding
import java.util.*;
public class level1 {
private static final int max_cache = 50;
private Map cache = new LinkedHashMap(max_cache, .75F, true) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > max_cache;
}
};
public level1() {
for (int i = 1; i < 52; i++) {
String string = String.valueOf(i);
cache.put(string, string);
System.out.println("\rCache size = " + cache.size() +
"\tRecent value = " + i + " \tLast value = " +
cache.get(string) + "\tValues in cache=" +
cache.values());
}
J'ai essayé d'utiliser FileOutputStream:
private Map cache = new LinkedHashMap(max_cache, .75F, true) {
protected boolean removeEldestEntry(Map.Entry eldest) throws IOException {
boolean removed = super.removeEldestEntry(eldest);
if (removed) {
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(eldest.getValue());
oos.close();
}
return removed;
}
Mais j'ai gagné une erreur
erreur (15,27): removeEldestEntry (java.util.Map .Entry) in ne peut pas remplacer removeEldestEntry (java.util.Map.Entry) dans java.util.LinkedHashMap; méthode surchargée ne jette pas java.io.IOException
Sans le compilateur IOExecptio demande de gérer IOexception et Filenotfoundexception. Peut-être existe-t-il un autre moyen? SVP montrez-moi un exemple de code, je suis nouveau en Java et j'essaie juste de comprendre les principes de base de la mise en cache à 2 niveaux. Thx
BTW super.removeEldestEntry (aîné) retourne toujours faux. Vous devez le remplacer pour renvoyer true lorsque vous souhaitez supprimer l'entrée la plus ancienne. Votre fichier t.tmp ne contient que la dernière entrée supprimée. Est-ce ce que vous vouliez? –