Я хочу кешировать локальные сетевые файлы в каталоге.Кэш должен быть постоянным, доступным только для чтения и должен иметь возможность управлять его размером (максимальный размер использования диска, удаление неиспользуемых файлов при заполнении).Я посмотрел на Apache JVS , но все больше путался, как его использовать (Cache / Replicator) или писать нового провайдера?
Я начал писать собственный кэш, но яЯ не уверен, что я на правильном пути.Другое дело, что он запускается в resolFile, а не при доступе к InputStream.
public static void main(final String[] args) {
new PlayCache().run();
}
private void run() {
try {
final StandardFileSystemManager fm = new StandardFileSystemManager();
fm.setFilesCache(new WarpCache());
fm.init();
VFS.setManager(fm);
final FileSystemManager fsm = VFS.getManager();
final FileObject fo = fsm.resolveFile("/mnt/archive/someFile.tgz");
final InputStream is = fo.getContent().getInputStream();
long counter=0;
while (is.read()!=-1)
{
counter++;
}
System.out.println(counter);
// replicator.close();
//dfsm.close();
} catch (final FileSystemException e) {
e.printStackTrace();
} catch (final IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class WarpCache extends AbstractFilesCache{
private final FilesCache subCache;
public WarpCache() {
this(new SoftRefFilesCache());
}
public WarpCache(final FilesCache cache) {
super();
subCache = cache;
}
public void putFile(final FileObject file) {
subCache.putFile(file);
}
public boolean putFileIfAbsent(final FileObject file) {
return subCache.putFileIfAbsent(file);
}
public FileObject getFile(final FileSystem filesystem, final FileName name) {
return subCache.getFile(filesystem, name);
}
public void clear(final FileSystem fileSystem) {
subCache.clear(fileSystem);
}
public void removeFile(final FileSystem filesystem, final FileName name) {
subCache.removeFile(filesystem, name);
}
}