Как сделать Java Proxy / Cache File System (VFS) - PullRequest
0 голосов
/ 16 мая 2019

Я хочу кешировать локальные сетевые файлы в каталоге.Кэш должен быть постоянным, доступным только для чтения и должен иметь возможность управлять его размером (максимальный размер использования диска, удаление неиспользуемых файлов при заполнении).Я посмотрел на 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);
    }

}

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