my-cache
Описание
This app demonstrates the work with SoftReference and WeakReference, as well as the work of the garbage collector in the context of caching
Языки
- Java100%
File Caching Application
Это приложение позволяет пользователям кэшировать файлы из указанной директории и извлекать их содержимое.
Приложение самостоятельно управляет процессом кэширования, используя комбинацию и .
Внутренний алгоритм и установленное время жизни файла (поле в классе ) определяют,
как долго файлы хранятся в кэше и когда кэш очищается.
Единственная возможность пользователю повлиять на процесс - запустить
сборку мусора (GC), что позволяет продемонстрировать работу и для управления кэшем.
Features
- Проверка директории: Обеспечивает, что указанная директория существует и является директорией.
- Извлечение файлов: Извлекает содержимое файла из кэша или восстанавливает его, если в кэше нет данных.
- Сборка мусора: Позволяет пользователям вручную запускать сборку мусора.
- Взаимодействие с пользователем: Взаимодействует с пользователем через консоль для указания директории и ключей файлов.
Architecture
Класс CacheData
Класс представляет сущность, которой оперирует приложение. Он содержит следующие поля:
: Ключ файла.String key: Данные файла в виде массива байт.byte[] bytes: Время последнего использования файла, на основе которого принимается решение о переносе объекта изLocalDateTime lastUsageDateTimeвsoftCache.weakCache
Класс FileService
Класс отвечает за получение данных файлов из указанной директории.
: Метод для получения данных файла по ключу. Если файл не найден, выбрасывается исключение.getData(String key)
Класс CacheService
Класс управляет кэшем файлов. Он хранит данные в двух коллекциях:
: Кэш с использованиемsoftCacheдля хранения данных файлов.SoftReference: Кэш с использованиемweakCacheдля хранения данных файлов.WeakReference: Максимальное время жизни файла в кэше в минутах.maxAge_min
Класс содержит следующие методы:
: Метод для получения данных файла из кэша по ключу. Внутри этого метода вызываются:getData(String key): получение данных файла из кэша.getFromCache(): запуск чистки кэша.clean(): вывод состояния кэша в консоль (показывает что находится вinspect()иweakCache).softCache
Класс Emulator
Класс отвечает за взаимодействие с пользователем.
Взаимодействие классов
- Пользовательский ввод: Класс
получает ввод от пользователя и передает его вEmulatorдля получения данных файла.FileService - Кэширование данных:
используетFileServiceдля кэширования данных файла.CacheServiceуправляет кэшем, осуществляет чтение из кэша, восстановление файлов, и периодически очищает кэш на основе времени жизни файла (CacheService).maxAge_min - Вывод состояния кэша:
может выводить состояние кэша в консоль, показывая, что находится вCacheServiceиweakCache.softCache
How to Use
- Укажите директорию:
Пользователю предлагается ввести путь к директории, где находятся файлы (напр. src/main/resources).
- Укажите ключ файла:
Пользователю предлагается ввести ключ (имя) файла, который он хочет извлечь (напр. Address.txt, Breeds.txt и т.д.)
- Просмотр содержимого файла:
Отображаются блок (состояние кэша на текущий момент)
и содержимое файла.
- Продолжить или выйти:
Пользователь может выбрать, продолжить извлечение файлов или выйти из приложения.
При выборе yes и продолжении работы, пользователю предлагается запустить сборку мусора, а далее снова ввести ключ файла (пункт 3)
При выборе no работа приложения завершается
- Ручная сборка мусора:
Пользователь может выбрать, запустить ли сборку мусора вручную.
Example Usage
Run
Запуск приложения осуществляется посредством плагина
Для запуска, находясь в директории проекта, выполните команду в консоли: