【问题标题】:Converting OutputStream into PipedOutputstream将 OutputStream 转换为 PipedOutputstream
【发布时间】:2020-11-27 20:58:12
【问题描述】:

在 Java 中,函数 A 中有一些现有代码返回一个 OutputStream,但我希望它返回一个 PipedOutputStream,我可以将它与 PipedInputStream 一起使用,如下所示:

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) 返回的是一个 OutputStream,而不是 Piped 的,所以不知道该怎么做。

【问题讨论】:

  • 不,投射不起作用。您能否编辑问题以添加代码的相关部分,以便更好地了解您要做什么?
  • @Joni 我添加了一些,只是为了澄清 - 谢谢。
  • 您可以访问 pgpService 代码吗?可以改吗?

标签: java casting stream inputstream outputstream


【解决方案1】:

你不需要做任何事情。

您构建的bufferedWriter 最终会写入this.outputStream,这是您的管道输出流。您不需要对其进行强制转换或对其进行任何操作 - 您已经在类的实例变量中引用了管道的两端。我假设您的代码如下所示。

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

【讨论】:

  • 这正是我的代码 - 很好的一点是,它使用 PipedOutputStream 作为参数,因此它最终应该有正确的引用,并且在技术上没有任何问题。谢谢。
猜你喜欢
  • 2015-01-13
  • 2018-07-19
  • 2019-06-17
  • 2020-09-28
  • 1970-01-01
  • 2010-09-18
  • 2010-09-08
  • 2010-10-08
相关资源
最近更新 更多