outputstream转inputstream, 如何将outputstream转换成inputstream?不知道小伙伴们今天来看看边肖的分享吧!
有三种方法可以将outputstream转换成inputstream。
方法1:使用字节数组缓存数据,并输入代码:
ByteArrayOutputStream out=new ByteArrayOutputStream();
class1.putDataOnOutputStream(out);
class2.processDataFromInputStream(
new ByteArrayInputStream(out.toByteArray())
);
方法二:使用管道。
第一种方法的问题是你必须有足够的内存来缓存所有的数据。您可以使用文件系统来缓存更多的数据,但是您可以处理的数据大小仍然是有限的。
解决方案是创建一个线程来为PipedOutputStream生成数据。当前线程可以从中读取数据。
输入代码:
PipedInputStream in=new PipedInputStream();
PipedOUtputStream out=new PipedOutputStream(in);
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(out);
}
}
).start();
class2.processDataFromInputStream(in);|||
方法三:使用循环缓冲区。
第二种方法中的两个管道流实际上管理一个隐藏的循环缓冲区。使用显式循环缓冲区更容易理解。循环缓冲液有以下优点。
一个CircularBuffers类而不是两个pipeline类。
它比缓存所有数据和额外线程更容易使用。
可以改变缓存大小,而不受流水线缓存区1K的固定缓存大小的限制。
多线程案例:
CircularByteBuffer cbb=new CircularByteBuffer();
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(cbb.getOutputStream());
}
}
).start();
class2.processDataFromInputStream(cbb.getInputStream());
单线程案例
//buffer all data in a circular buffer of infinite size
CircularByteBuffer cbb=new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);
class1.putDataOnOutputStream(cbb.getOutputStream());
class2.processDataFromInputStream(cbb.getInputStream());
outputstream转inputstream,以上就是本文为您收集整理的outputstream转inputstream最新内容,希望能帮到您!更多相关内容欢迎关注。