不推荐使用的Files.copy,ByteStreams.copy,InputSupplier的替代品

时间:2014-08-29 03:08:36

标签: android inputstream guava deprecated

我正在申请中升级Guava库。我在几个地方有以下结构,以创建&从File写入InputStream

File destination;
InputStream myInputStream; 
.
.
.
Files.copy(new InputSupplier<InputStream>() {
    @Override
    public InputStream getInput() throws IOException {
        return myInputStream;
    }
}, destination);

问题是,InputSupplierFiles.copy已被弃用,其他一些替代方案(如ByteStreams.copy)也已弃用

有人能告诉我Guava中是否有自然替代品可以将任意InputStream写入文件?

2 个答案:

答案 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));