Имеет ли смысл использовать `java.nio.file.spi` для реализации доступа к удаленной файловой системе? - PullRequest
0 голосов
/ 30 августа 2010

В основном я пишу приложение, которое копирует / перемещает файлы из локальной файловой системы в удаленную файловую систему по какому-либо FTP-подобному протоколу.

Будет ли хорошим подходом инкапсулировать специфичные для протокола биты в интерфейсе поставщика службы файловой системы?

Насколько я понимаю, это заставило бы мою библиотеку работать с другими приложениями, использующими новый IO API, верно?

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

Похоже, вы думаете о создании класса RemoteFileSystemProvider специально для вашей удаленной файловой системы. Этот класс будет отражать FileSystemProvider, предоставляя аналогичные функции для доступа к удаленной файловой системе, которую вы используете. Если это что-то, от чего ваш проект или команда могут получить многократное использование, тогда стоит отразить объект FileSystemProvider при создании вашего кода. Это позволяет любому, кто знаком с пакетом java.nio.file, легко понять, как использовать ваш.

Имейте в виду, однако, что FileSystemProvider сам по себе не соответствует каким-либо интерфейсам или расширяет какие-либо классы в пакете. Это точка входа, и ваш класс также будет точкой входа. Однако, если вы имитируете структуру метода, вы будете генерировать Channel объектов для чтения и записи, которые будут соответствовать спецификациям java.nio, которые можно использовать повторно. Это позволит любому коду, который знает, как работать с каналами, иметь возможность работать с каналами, созданными поставщиком удаленной файловой системы.

Однако моим первым шагом в создании чего-то подобного было бы просто создать пакет специально для этой удаленной файловой системы. Он будет обрабатывать все коммуникации и реализовывать базовые функции, такие как getUploadChannel, getDownloadChannel, renameRemoteFile, copyRemoteFile, deleteRemoteFile и любые другие необходимые функции. Это даст вам хороший здравый интерфейс, определенный для этой конкретной файловой системы и ее функциональных возможностей. Этот пакет может использоваться в любом контексте, чтобы просто реализовать соединение с этой файловой системой. Если вы убедитесь, что этот объект использует каналы для загрузки и скачивания файлов, он будет готов к интеграции с любым API, который использует java.nio.

Только после того, как это будет завершено, протестировано и работает, я подумаю, какой интерфейс я хотел бы имитировать или реализовать для доставки остальной команде. Это гарантирует, что любые изменения в протоколе удаленной файловой системы или API Java будут иметь минимальное влияние на всю систему.

1 голос
/ 31 августа 2010

Я бы сломался и использовал бы FTP-подобный протокол. Проблема с реализацией низкоуровневых API поверх высокоуровневых API заключается в том, что вы скрываете все истинные затраты и упрощаете работу, что на самом деле чрезвычайно сложно или дорого. Рассмотрим seek () для примера.

...