3

、、およびを使用して、removeEldestEntryメソッドをオーバーライドして最も古いエントリをファイルに保存するにはどうすればよいですか。コード。FileOutputStreamDataOutputStreamwriteObject()

次に例を示します。

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());

    }
4

2 に答える 2

8

コードはほぼ完成しています。

private Map cache = new LinkedHashMap(max_cache, .75F, true) {
    protected boolean removeEldestEntry(Map.Entry eldest) {
       // Pseudo-Code 
       if(this.size() > MAX_CACHE_SIZE){
           FileOutputStream fos = new FileOutputStream("t.tmp");
           ObjectOutputStream oos = new ObjectOutputStream(fos);

           oos.writeObject(eldest.getValue());
           return true;
       } finally {
           oos.close();
           fos.close();
       }

       return false;
    }
};
于 2011-01-27T12:42:09.007 に答える
1
  • 電話super.removeEldestEntry
  • アイテムが削除された場合は、OutputStreamを開きます
  • オブジェクトを書き出す
  • スーパーコールからブール値を返します。
于 2011-01-27T12:20:58.760 に答える