0


0

リモートファイルシステムへのアクセスを実装するために「java.nio.file.spi」を使用するのは理にかなっていますか?

基本的に、ローカルファイルシステムからリモートファイルシステムにファイルをFTPのようなプロトコルを介してコピー/移動するアプリケーションを作成します。

ファイルシステムサービスプロバイダーインターフェイス内にプロトコル固有のビットをカプセル化することは良いアプローチでしょうか?

私のライブラリが新しいIO APIを使用して他のアプリケーションで動作することを理解する限り、そうですか?

2 Answer


3


リモートファイルシステム専用の `RemoteFileSystemProvider`クラスを作成することを考えているようです。 このクラスは `FileSystemProvider`をミラー化し、使用しているリモートファイルシステムにアクセスするための同様の機能を提供します。 これがプロジェクトやチームが繰り返し使用できるものである場合、コードを作成するときに `FileSystemProvider`オブジェクトをミラーリングする価値があります。 これにより、 `java.nio.file`パッケージに精通している人なら誰でもあなたのパッケージの使い方を簡単に理解できます。

ただし、 FileSystemProvider`自体はどのインターフェイスにも準拠していないか、パッケージ内のクラスを拡張していません。 これはエントリポイントであり、クラスもエントリポイントになります。 しかし、メソッド構造を模倣した場合、読み書きするための `Channel`オブジェクトが生成され、再利用可能な java.nio`仕様に準拠します。 これにより、チャネルの操作方法を知っている任意のコードが、リモートファイルシステムプロバイダーによって生成されたチャネルを操作できるようになります。

ただし、このようなものを構築する最初のステップは、このリモートファイルシステム専用のパッケージを構築することです。 すべての通信を処理し、「getUploadChannel」、「getDownloadChannel」、「renameRemoteFile」、「copyRemoteFile」、「deleteRemoteFile」などの基本的な機能を実装し、その他の機能が必要になります。 これにより、この特定のファイルシステムとその機能に対して定義された優れた常識的なインターフェイスが得られます。 このパッケージを任意のコンテキストで使用して、このファイルシステムへの接続を実装することができます。 このオブジェクトがファイルをアップロードおよびダウンロードするためにチャネルを使用していることを確認すると、 `java.nio`を使用するAPIと統合する準備が整います。

これが完了し、テストされ、機能するようになってから、他のチームに配信するために模倣または実装するインターフェイスを検討します。 これにより、リモートファイルシステムプロトコルまたはJava APIの変更がシステム全体に与える影響が最小限に抑えられます。


1


私は落ち着いて、FTPのようなプロトコルを使用します。 高レベルAPIを介して低レベルAPIを実装する際の問題は、すべての真のコストを偽装し、実際に非常に困難または高価なものを簡単に見せることです。 たとえば、seek()を検討してください。