Java 关于文件和InputStream参数的API设计问题 可以将文件视为输入流的特殊情况,并提供1个API,如 test(InputStream stream)

Java 关于文件和InputStream参数的API设计问题 可以将文件视为输入流的特殊情况,并提供1个API,如 test(InputStream stream),java,api,Java,Api,或者两个重载API更好 test(File f) test(InputStream stream) 提供接受InputStream的API可能是这方面最常用的方法 如果经常/有时调用API的目的是从文件加载,那么提供一个额外的重载来接受文件可能是有利的 最后,它归结为使用某个方法的频率:添加一个额外的重载方法花费不多,但如果API中充斥着未使用的方法,它可能会变得不那么优雅。文件肯定不是输入流。它可以用来创建输入流,但它本身不是一个输入流 请注意,您给出的重载具有根本不同的特征-接受文件的方法

或者两个重载API更好

test(File f)
test(InputStream stream)

提供接受
InputStream
的API可能是这方面最常用的方法

如果经常/有时调用API的目的是从文件加载,那么提供一个额外的重载来接受
文件
可能是有利的


最后,它归结为使用某个方法的频率:添加一个额外的重载方法花费不多,但如果API中充斥着未使用的方法,它可能会变得不那么优雅。

文件肯定不是输入流。它可以用来创建输入流,但它本身不是一个输入流

请注意,您给出的重载具有根本不同的特征-接受
文件的方法不需要更改任何状态,但接受
输入流的方法几乎肯定会更改任何状态。另外,假设他们将在内部执行类似的操作,
文件
方法将希望关闭在该方法中打开的流;
InputStream
方法不想关闭流,因为它不“拥有”它

这没关系——不管怎样,使用这两种方法也没关系——但你需要意识到其中的区别


另一个选项是使用库并获取一个-then调用者可以使用
文件。newInputStreamSupplier(file)
来指定流,但也可以使用网络相关输入流的供应商,等等。

这是唯一的方法:

test(URL url)
??现在,您的API能够处理文件系统上的文件、HTTP/FTP资源、类路径资源(请参阅),以及更多现成的资源(支持的协议实际上是可插拔的)

只需调用
.getInputStream()