问题描述
在两种不同的情况下,我尝试将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 (将#修改为@)