my-cache

0

Описание

This app demonstrates the work with SoftReference and WeakReference, as well as the work of the garbage collector in the context of caching

Языки

  • Java100%
год назад
год назад
readme.md

File Caching Application

Это приложение позволяет пользователям кэшировать файлы из указанной директории и извлекать их содержимое.

Приложение самостоятельно управляет процессом кэширования, используя комбинацию

SoftReference
и
WeakReference
. Внутренний алгоритм и установленное время жизни файла (поле
maxAge_min
в классе
CacheService
) определяют, как долго файлы хранятся в кэше и когда кэш очищается.

Единственная возможность пользователю повлиять на процесс - запустить сборку мусора (GC), что позволяет продемонстрировать работу

SoftReference
и
WeakReference
для управления кэшем.

Features

  • Проверка директории: Обеспечивает, что указанная директория существует и является директорией.
  • Извлечение файлов: Извлекает содержимое файла из кэша или восстанавливает его, если в кэше нет данных.
  • Сборка мусора: Позволяет пользователям вручную запускать сборку мусора.
  • Взаимодействие с пользователем: Взаимодействует с пользователем через консоль для указания директории и ключей файлов.

Architecture

Класс
CacheData

Класс

CacheData
представляет сущность, которой оперирует приложение. Он содержит следующие поля:

  • String key
    : Ключ файла.
  • byte[] bytes
    : Данные файла в виде массива байт.
  • LocalDateTime lastUsageDateTime
    : Время последнего использования файла, на основе которого принимается решение о переносе объекта из
    softCache
    в
    weakCache
    .

Класс
FileService

Класс

FileService
отвечает за получение данных файлов из указанной директории.

  • getData(String key)
    : Метод для получения данных файла по ключу. Если файл не найден, выбрасывается исключение.

Класс
CacheService

Класс

CacheService
управляет кэшем файлов. Он хранит данные в двух коллекциях:

  • softCache
    : Кэш с использованием
    SoftReference
    для хранения данных файлов.
  • weakCache
    : Кэш с использованием
    WeakReference
    для хранения данных файлов.
  • maxAge_min
    : Максимальное время жизни файла в кэше в минутах.

Класс

CacheService
содержит следующие методы:

  • getData(String key)
    : Метод для получения данных файла из кэша по ключу. Внутри этого метода вызываются:
    • getFromCache()
      : получение данных файла из кэша.
    • clean()
      : запуск чистки кэша.
    • inspect()
      : вывод состояния кэша в консоль (показывает что находится в
      weakCache
      и
      softCache
      ).

Класс
Emulator

Класс

Emulator
отвечает за взаимодействие с пользователем.

Взаимодействие классов

  1. Пользовательский ввод: Класс
    Emulator
    получает ввод от пользователя и передает его в
    FileService
    для получения данных файла.
  2. Кэширование данных:
    FileService
    использует
    CacheService
    для кэширования данных файла.
    CacheService
    управляет кэшем, осуществляет чтение из кэша, восстановление файлов, и периодически очищает кэш на основе времени жизни файла (
    maxAge_min
    ).
  3. Вывод состояния кэша:
    CacheService
    может выводить состояние кэша в консоль, показывая, что находится в
    weakCache
    и
    softCache
    .

How to Use

  1. Укажите директорию:

Пользователю предлагается ввести путь к директории, где находятся файлы (напр. src/main/resources).

  1. Укажите ключ файла:

Пользователю предлагается ввести ключ (имя) файла, который он хочет извлечь (напр. Address.txt, Breeds.txt и т.д.)

  1. Просмотр содержимого файла:

Отображаются блок

Cache inspection
(состояние кэша на текущий момент) и содержимое файла.

  1. Продолжить или выйти:

Пользователь может выбрать, продолжить извлечение файлов или выйти из приложения.

При выборе yes и продолжении работы, пользователю предлагается запустить сборку мусора, а далее снова ввести ключ файла (пункт 3)

При выборе no работа приложения завершается

  1. Ручная сборка мусора:

Пользователь может выбрать, запустить ли сборку мусора вручную.

Example Usage

Run

Запуск приложения осуществляется посредством плагина

exec-maven-plugin

Для запуска, находясь в директории проекта, выполните команду в консоли: