Java 7 引入了一个用于编写自定义文件系统的出色 API。考虑一个用例,我不想实现新的文件系统,我只想调整现有文件系统的行为。例如,翻转从中写入/读取的每一位。
在我看来,当前的jdk并没有为此提供适当的设施。 AbstractFileSystemProvider,WindowsFileSystemProvider 扩展的提供程序是包私有的,因此我无法重用它。我什至没有找到Linux的具体实现。
问题#1:当前文件系统没有用于扩展的有用抽象。
假设我仅针对 Windows 进行扩展。 WindowsFileSystemProvider 是公共的,因此我实际上可以轻松地覆盖 newByteChannel 并使用它来完成。可惜!
问题#2:WindowsFileSystem 是notpublic,所以我实际上必须编写一个全新的文件系统只是为了引入一个新的提供程序。
我是否遗漏了一些东西,或者这个功能完全是原始的,还没有准备好供应用程序编写者使用?
联系openjdk中的core-libs-dev后,得到以下答案:
服务提供程序接口允许您替换默认提供程序或对其进行干预(有关如何配置的详细信息,请参阅 FileSystems.getDefault 文档)。当您介入默认提供程序时,您就有机会进行自定义,尽管确保所有委派正确可能很棘手。作为起点,然后查看 jdk/test 树中的 PassThroughFileSystem,这是某些测试使用的提供程序,可能就是您正在寻找的。
PassThroughFileSystem 是一个很好的参考实现,它演示了如何通过正确委托给默认提供程序来实现自定义提供程序。话虽如此,我认为问题仍然存在,但至少我们有一个更好的起点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)