使用PipedInputStream / PipedOutputStream连接InputStream和OutputStream

问题描述

在两种不同的情况下,我尝试将InputStream与OutputStream连接,并且当原始InputStream中的数据大小小于BUFFER_SIZE时,上述两种情况均按预期工作,但是当超过BUFFER_SIZE,尽管最终InputStream的使用者正在尝试使用流,但它挂起并似乎正在等待被使用。

方案1:

PipedInputStream is = new PipedInputStream(BUFFER_SIZE);
PipedOutputStream os = new PipedOutputStream(in);

service.decrypt(originalInputStream,os);
service.encrypt(is,finalOutputStream);

这里decrypt()方法正在消耗originalInputStream并将输出写入PipedInputStream(os),我需要使用以下命令将输出重定向到下一个方法encrypt()一个参数,并将encrypt()方法输出存储到finalOutputStream中。

方案2:

public InputStream download(InputStream downloadableInputStream) {
   PipedInputStream is = new PipedInputStream(BUFFER_SIZE);
   PipedOutputStream os = new PipedOutputStream(is);

   service.encrypt(downloadableInputStream,os);

   return is;
}

此处download()方法接受并返回InputStream,它将尝试使用encrypt()方法对流进行加密,并且该方法调用者将使用加密的流。

encrypt()decrypt()方法在内部创建一个新线程,并使用倒数锁存器等待完成。

在这些情况下,encrypt()decrypt()方法都在没有PipedInputStream / PipedOutputStream的情况下使用,并且它们按预期与非常大的文件一起使用,这似乎仅在使用PipedInputStream / PipedOutputStream时出现问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)