как мы можем получить изображения через кеш, когда они находятся в памяти и как сделать такую ​​логику - PullRequest
0 голосов
/ 22 апреля 2010

Я делаю веб-приложение, я хочу хранить изображения в кеше. В следующий раз я не хочу получать изображения из сети. Как я могу реализовать с помощью Java, используя WeakHashmap или Hashmap.

1 Ответ

1 голос
/ 22 апреля 2010

Допустим, у вас есть класс NetworkImageService, который извлекает изображение удаленно:

class NetworkImageService {

    public Image getImage(name) { ... }

}

Тогда вы можете создать подкласс для этого CachedNetworkImageService, например:

 class CachedNetworkImageService extends NetworkImageService {

    Cache cache = new Cache();

    public Image getImage(name) { ... 
          Image img = cache.get(name);
          if( img == null ) {
                 img = super.getImage(name);
                 cache.put( name, img );
          }
          return img.
    }
}

Это основная идея, как я обычно делаю (но это псевдокод). Вы, конечно, можете улучшить его и использовать, например, cache.contains() вместо того, чтобы сверять с null.

В самом простом случае вы можете заменить Cache на Hashmap. В противном случае вы можете улучшить это и реализовать различные стратегии в кеше. У вас может быть политика выселения, которая удаляет изображение через некоторое время или по схеме LIFO.

Приведенный выше код не поддерживает одновременный доступ, поэтому вам также следует учесть это. Самый простой способ сделать его поточно-ориентированным - это синхронизировать метод getImage().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...