Google 番石榴:在弃用“InputSupplier”和“OutputSupplier”实用程序后使用“ByteSource”和“ByteSink”
Google guava: Using `ByteSource` and `ByteSink` after deprecation of `InputSupplier` and `OutputSupplier` utilities
我在我的项目中遇到了使用 Google Guava 的 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
相关代码的类似重构。
问题一:以上重构是否正确?我的思考方向正确吗?
问题 2:我可以将 ZipOutputStream
包裹在 ByteSink
中吗?
问题 3:如果上一个问题是肯定的,我将如何从 ByteSink
中取回 ZipOutputStream
returns OutputStream
?在这种情况下,转换会像下面的代码片段那样工作吗?
ZipOutputStream zipOutputStream = (ZipOutputStream) newOutputSupplier().openStream(); // Casting
或者我需要从 OutputStream
创建新的 ZipOutputStream
吗?
ZipOutputStream zipOutputStream = new ZipOutputStream(newOutputSupplier().openStream());
问题 4:我可以包装任何类型的 InputStream
或 OutputStream
吗?
注意:我主要给出了OutputStream
、ZipOutputStream
和ByteSink
的例子,但我正在做InputStream
、ZipInputStream
和 ByteSource
.
的类似内容
- 您可能应该使用例如Files.asByteSink.
- 我不会。
ByteSink
适用于没有其他方法的通用 OutputStream
。
- 不适用。
- 是的,只要每次都能创建一个新的。
我在我的项目中遇到了使用 Google Guava 的 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
相关代码的类似重构。
问题一:以上重构是否正确?我的思考方向正确吗?
问题 2:我可以将 ZipOutputStream
包裹在 ByteSink
中吗?
问题 3:如果上一个问题是肯定的,我将如何从 ByteSink
中取回 ZipOutputStream
returns OutputStream
?在这种情况下,转换会像下面的代码片段那样工作吗?
ZipOutputStream zipOutputStream = (ZipOutputStream) newOutputSupplier().openStream(); // Casting
或者我需要从 OutputStream
创建新的 ZipOutputStream
吗?
ZipOutputStream zipOutputStream = new ZipOutputStream(newOutputSupplier().openStream());
问题 4:我可以包装任何类型的 InputStream
或 OutputStream
吗?
注意:我主要给出了OutputStream
、ZipOutputStream
和ByteSink
的例子,但我正在做InputStream
、ZipInputStream
和 ByteSource
.
- 您可能应该使用例如Files.asByteSink.
- 我不会。
ByteSink
适用于没有其他方法的通用OutputStream
。 - 不适用。
- 是的,只要每次都能创建一个新的。