我可以将File视为InputStream的一个特例,并提供1个API,如
test(InputStream stream)
或两个重载API更好
test(File f)
test(InputStream stream)
答案 0 :(得分:3)
文件肯定不是输入流。它可用于创建输入流,但它本身不是一个。
请注意,您提供的重载具有根本不同的特征 - 接受File
的方法不需要更改任何状态,但接受InputStream
的方法几乎肯定会。此外,假设他们将在内部执行类似操作,File
方法将要关闭方法中打开的流; InputStream
方法不会想要关闭流,因为它不“拥有”它。
没关系 - 无论如何都可以使用这两种方法 - 但是你需要注意区别。
另一种选择是使用Guava库并使用InputSupplier<InputStream>
- 然后调用者可以使用Files.newInputStreamSupplier(file)
来指定流,但也可以使用与网络相关的输入流的供应商等等。
答案 1 :(得分:1)
提供接受InputStream
的API可能是该领域最常用的方法。
如果经常/有时会调用API,目的是从文件加载,那么提供接受File
的额外重载可能是有利的。
最后,它归结为使用某些内容的频率:添加额外的重载方法不会花费太多,但如果您的API充斥着未使用的方法,那么它可能会变得不那么优雅。
答案 2 :(得分:0)
这是唯一的方法:
test(URL url)
?现在,您的API能够处理文件系统上的文件,HTTP / FTP资源,CLASSPATH资源(请参阅ClassLoader.getResource()
),以及更多开箱即用(支持的协议实际上是可插入的)。
只需致电URL.openConnection()
.getInputStream();