Как я могу переопределить метод removeEldestEntry для сохранения старшей записи в файл? Также как ограничить размер файла, как я сделал это в LinkedHashMap. Вот код: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());
}
Я пытался использовать 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;
}
Но я получил сообщение об ошибке
Ошибка (15,27): removeEldestEntry (java.util.Map .Entry) in не может переопределить removeEldestEntry (java.util.Map.Entry) в java.util.LinkedHashMap; переопределенный метод не бросает java.io.IOException
Без компилятора IOExecptio запрашивает обработку IOexception и Filenotfoundexception. Возможно, существует другой способ? Pls показывает мне пример кода, я новичок в java и просто пытаюсь понять основные принципы кэширования уровня 2. Thx
BTW super.removeEldestEntry (старший) всегда возвращает ложь. Вы должны переопределить его, чтобы вернуть true, если хотите, чтобы старшая запись была сброшена. В вашем файле t.tmp будет сохранена только последняя запись. Это то, что вы намеревались? –