我有Observable<Person>
和来自外部库sendByStream(InputStream inputStream)
的方法
我想输入我的输出流
final PipedOutputStream pipedOutputStream = new PipedOutputStream();
final PipedInputStream pipedInputStream = new PipedInputStream(pipedOutputStream);
使用我的可观察对象并将其发送到此外部方法。我不知道如何以非阻塞方式进行操作,因为sendByStream(InputStream inputStream)
正在阻塞。
我尝试将Observable
转换为Completable
,在doOnNext
中写入流,并使用方法doOnCompleted
关闭并发送流,但是首先填充完全传递管道,然后通过方法发送。
我应该为sendByStream
方法打开另一个线程,还是有一种方法可以使用rxJava风格?
我现在所拥有的(非常幼稚的暗示,但是可以正常工作):
try {
PipedOutputStream pipedOutputStream = new PipedOutputStream();
PipedInputStream pipedInputStream = new PipedInputStream(pipedOutputStream);
new Thread(() -> {
facade.sendByStream(pipedInputStream);
try {;
pipedInputStream.close();
} catch(final IOException e) {
e.printStackTrace();
}
}).start();
return persons.
.doOnNext(p -> {
try {
pipedOutputStream.write(p.getBytes());
} catch(final IOException e) {
LOGGER.error("Problem with writing to output stream");
}
})
.toCompletable()
.doOnCompleted(() -> {
try {
LOGGER.info("Closing output stream");
pipedOutputStream.close();
LOGGER.info("output stream closed");
} catch(IOException e) {
LOGGER.error("Problem with closing output stream");
}
})
.doOnCompleted(() -> LOGGER.info("Sending file completed"));
} catch(final IOException e) {
return Completable.error(RuntimeException::new);
}