Преобразование OutputStream в PipedOutputstream

В 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);

Итак, в переключателе выше, когда out равно this.outputStream;, он работает нормально. потому что это PipedOutputStream. но pgpService.buildPgpOutputStream(this.outputStream, encryptionKeyId) возвращает OutputStream, а не Piped, поэтому не уверен, что делать.


person ethereumbrella    schedule 07.08.2020    source источник
comment
Нет, кастинг не пройдет. Можете ли вы отредактировать вопрос, чтобы добавить соответствующие части кода, чтобы лучше понять, что вы пытаетесь сделать?   -  person Joni    schedule 07.08.2020
comment
@Joni Я добавил немного, просто для пояснения - спасибо.   -  person ethereumbrella    schedule 07.08.2020
comment
у вас есть доступ к коду pgpService? Вы можете это изменить?   -  person Massimo Petrus    schedule 07.08.2020


Ответы (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);
person Joni    schedule 07.08.2020
comment
Это именно мой код - и отличный момент, что он использует PipedOutputStream в качестве параметра, поэтому в любом случае он должен иметь правильную ссылку и не иметь никаких технических проблем. Спасибо. - person ethereumbrella; 07.08.2020