我在我的项目中遇到了一些旧的代码,其中使用了 InputSupplier
和 OutputSupplier
的实用程序。由于这些类在最新的版本中已被废弃,我需要相应地重构我的代码。
通过在网上查找,我知道可以使用 ByteSource
和 ByteSink
代替 InputSupplier
和 OutputSupplier
通过做一些最小的改动。下面的例子代表了我用ByteSink代替了 OutputSupplier
.
public static OutputSupplier<? extends OutputStream> newOutputSupplier() {
return new OutputSupplier<OutputStream>() {
@Override
public OutputStream getOutput() throws IOException {
return new FileOutputStream(file); // file defined earlier
}
在使用 ByteSink
public static ByteSink newOutputSupplier() {
return new ByteSink() {
@Override
public OutputStream openStream() throws IOException {
return new FileOutputStream(file); // file defined earlier
}
};
}
类似的重构 InputSupplier
相关代码。
问题1: 以上重构是否正确,我的思路是否正确?
问题二: 我可以包 ZipOutputStream
在 ByteSink
?
问题3: 如果前一个问题的答案是 "是",那么我将如何取回。ZipOutputStream
从 ByteSink
由于它返回 OutputStream
? 在这种情况下,是否可以像下面的片段一样进行铸造?
ZipOutputStream zipOutputStream = (ZipOutputStream) newOutputSupplier().openStream(); // Casting
还是我需要创建新的 ZipOutputStream
从 OutputStream
?
ZipOutputStream zipOutputStream = new ZipOutputStream(newOutputSupplier().openStream());
问题4: 我可以包任何类型的 InputStream
或 OutputStream
?
注: 我主要举了以下例子 OutputStream
, ZipOutputStream
和 ByteSink
但我正在做类似的事情,为 InputStream
, ZipInputStream
和 ByteSource
.
ByteSink
是为了通用 OutputStream
没有其他方法的。