我正在申请中升级Guava库。我在几个地方有以下结构,以创建&从File
写入InputStream
。
File destination;
InputStream myInputStream;
.
.
.
Files.copy(new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return myInputStream;
}
}, destination);
问题是,InputSupplier
和Files.copy
已被弃用,其他一些替代方案(如ByteStreams.copy
)也已弃用
有人能告诉我Guava中是否有自然替代品可以将任意InputStream写入文件?
答案 0 :(得分:4)
从myInputStream
返回openStream
非常危险,而不是ByteSource
的使用方式。 ByteSource.openStream()
应该打开 new InputStream
。
相反,您应该使用Files.asByteSink(destination).writeFrom(myInputStream)
,或者您应该将myInputStream
的创建移至openStream()
实施。
答案 1 :(得分:1)
javadoc
建议将File.copy
替换为from.copyTo(Files.asByteSink(destination))
,其中from
必须是ByteSource
而不是InputSupplier
。
因此,您的代码必须按以下方式更改:
new ByteSource() {
@Override
public InputStream openStream() throws IOException {
return myInputStream;
}
}.copyTo(Files.asByteSink(destination));