将 OutputStream 转换为 PipedOutputstream

Converting OutputStream into PipedOutputstream

在 Java 函数 A 中有一些现有代码 return 是一个 OutputStream,但我希望它成为 return 我可以与 PipedInputStream 一起使用的 PipedOutputStream所以:

this.inputStream = new PipedInputStream(this.outputStream);

将 OutputStream 转换为 PipedInputStream 是否可行,或者我是否需要从一个全新的 PipedOutputStream 开始并在那里重复所有逻辑?

更多代码:

我的 PipedInputStream 将像这样将数据传输到 s3:

tm.upload(bucketName, objectKey, this.inputStream, objectMetadata);

(tm 是 TransferManager)

并且 PipedOutputStream 将与写入文件的 Writer 一起使用。

OutputStream out = (encryptionKeyId != null) ?
                    pgpService.buildPgpOutputStream(this.outputStream, encryptionKeyId) :
                    this.outputStream;
            return toBufferedWriter(out);

所以在上面的开关中,当 outthis.outputStream; 时,它工作正常。因为它是 PipedOutputStream。但是 pgpService.buildPgpOutputStream(this.outputStream, encryptionKeyId) return 是一个 OutputStream,而不是一个 Piped 流,所以不知道该怎么做。

您不需要做任何事情。

您构建的 bufferedWriter 最终会写入 this.outputStream,这是您的管道输出流。您不需要转换它或对它做任何事情——您已经在 class 的实例变量中引用了管道的两端。我假设您的代码如下所示。

this.outputStream = new PipedOutputStream();
this.inputStream = new PipedInputStream(this.outputStream);
OutputStream out = (encryptionKeyId != null) ?
                    pgpService.buildPgpOutputStream(this.outputStream, encryptionKeyId) :
                    this.outputStream;
return toBufferedWriter(out);