Apache VFS в памяти

1

Я просто нашел VFS как способ доступа к sftp. Кажется, нужно работать, но все примеры предполагают локальный файл; вместо этого у меня есть данные в памяти. Я вижу только метод copyFrom (FileObject), без перегрузок, принимающих поток или буфер... Поэтому я попробовал баран, поскольку он звучит примерно правильно (какая-то документация не повредит, но я не могу это прекратить), и следующий тест преуспеет, Также работало копирование в файл sftp FileObject.

ВОПРОС. Он дает следующий вывод: INFO: использование "C:\Users\myname\AppData\Local\Temp\vfs_cache" в качестве хранилища временных файлов.

- на самом деле он пишет временный файл? Это то, чего я пытался избежать (из-за потенциальных проблем с разрешениями/параллелизмом на серверах Unix, где эта вещь будет работать). Если да, то как мне сделать это полностью в памяти?

// try to copy a string from memory into a FileObject
public class VFSTest {

    public static void main(String[] args) throws IOException {
        String hello = "Hello, World!";
        FileObject ram = VFS.getManager().resolveFile("ram:/tmp");
        OutputStream os = ram.getContent().getOutputStream();
        os.write(hello.getBytes());
        ram.getContent().close();

        FileObject local = VFS.getManager().resolveFile("C:\\foo.txt");
        local.copyFrom(ram, Selectors.SELECT_SELF);
    }
}
  • 0
    Если вы не используете ram-файлы ни для чего, кроме исходного, может быть лучше записать ваши строки или буферы непосредственно в цель (с помощью write() ). Если вы создаете файлы оперативной памяти, вы можете вместо этого попытаться создать удаленные файлы напрямую и сохранить копию оперативной памяти.
Теги:
ram
apache-commons-vfs

1 ответ

0

Нет, сообщение журнала является общим, созданным при настройке диспетчера файловой системы. Он используется для так называемого репликатора. Вы не используете его в своем примере.

Да файловая система ram - это одна из возможностей для хранения файлов в памяти. Если у вас, с другой стороны, есть существующий источник данных или байтовый буфер, вам нужно будет его перекачать: в VFS нет функции для чтения из InputStream (есть один, чтобы написать содержимое FileContent в OutputStream). Для этого обычно используется commons-io IOUtils#copy().

Да, описание немного короткое, но на самом деле этого мало. Единственная фактическая конфигурация - это возможный максимальный размер. (Я действительно заметил, что ссылка на файловую систему также говорит о предикате для фильтрации ресурсов, но это не реализовано, поэтому я удалил его из версии 2.1 этой страницы).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню