Module-HTTPD/src/main/java/dev/plex/cache/FileCache.java

38 lines
1.1 KiB
Java

package dev.plex.cache;
import com.google.common.collect.EvictingQueue;
import dev.plex.HTTPDModule;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Queue;
public class FileCache
{
private final Queue<CacheItem> cache = EvictingQueue.create(15);
public byte[] getFile(File file) throws IOException
{
return getFile(file.getPath());
}
public byte[] getFile(String path) throws IOException
{
CacheItem theItem = cache.stream().filter(cacheItem -> HTTPDModule.fileNameEquals(cacheItem.path, path)).findFirst().orElse(null);
if (theItem == null)
{
theItem = new CacheItem(new File(path));
if (theItem.file.length < 1048576) cache.add(theItem);
}
if (System.currentTimeMillis() - theItem.timestamp > 3 * 60 * 1000) // 3 minutes
{
cache.remove(theItem);
theItem = new CacheItem(new File(path));
if (theItem.file.length < 1048576) cache.add(theItem);
}
return theItem.file;
}
}