基本上,我编写了一个应用程序,通过某种类似FTP的协议将文件从本地文件系统复制/移动到远程文件系统。
将特定于协议的位封装在文件系统服务提供程序接口中是一种好方法吗?
据我所知,这将使我的库与使用新IO API的其他应用程序一起工作,对吗?
发布于 2010-08-30 22:33:16
您似乎正在考虑专门为您的远程文件系统创建一个RemoteFileSystemProvider类。这个类将镜像FileSystemProvider,提供类似的功能来访问您正在使用的远程文件系统。如果这是您的项目或团队可以重复使用的东西,那么在创建代码时镜像FileSystemProvider对象是值得的。这使得熟悉java.nio.file包的任何人都可以很容易地理解如何使用您的包。
但是请记住,FileSystemProvider本身并不符合任何接口,也不会扩展包中的任何类。它是一个入口点,您的类也将是一个入口点。但是,如果您模仿了方法结构,您将生成可读写的Channel对象,这些对象将符合可重用的java.nio规范。这将允许任何知道如何使用通道的代码能够使用由您的远程文件系统提供商生成的通道。
然而,要构建这样的东西,我的第一步是专门为这个远程文件系统构建一个包。它将处理所有的通信,并实现getUploadChannel、getDownloadChannel、renameRemoteFile、copyRemoteFile、deleteRemoteFile等基本功能,以及所需的任何其他功能。这将为您提供一个为该特定文件系统及其功能定义的良好常识接口。这个包可以在任何上下文中使用,只需实现到此文件系统的连接。如果您确保此对象使用通道来上传和下载文件,那么它将准备好与任何使用java.nio的API集成。
只有在完成、测试和工作之后,我才会考虑要模仿或实现哪个接口,以便交付给团队的其他成员。这将确保对远程文件系统协议或java API的任何改变将对整个系统具有最小的影响。
发布于 2010-08-31 17:21:03
我会开始使用类似FTP的协议。在高级API上实现低级API的麻烦在于,你掩盖了所有真实的成本,并让事情看起来很容易,实际上是非常困难或昂贵的。例如,考虑seek()。
https://stackoverflow.com/questions/3601067
复制相似问题