日期:2014-05-19  浏览次数:20802 次

如何将多个 InputStream 直接包装成一个流,不操作文件?
现有一个项目,是基于云平台的开发,应用程序不能在服务器创建文件,因为不具备权限、且具体响应的服务器IP是未知的。
问题如下:
根据多个文件ID,可从文件服务器获取多个 InputStream 供用户下载,但是用户需要多次保存。
现需要将这多个 InputStream 直接包装成一个流(即:不能在服务器上创建真实的文件和文件夹),使用户只需要保存一次。





?InputStream 包装成一个流 不操作文件 多个?InputStream 云平台

------解决方案--------------------
引用:
引用:我没有理解楼主的意思,好像是要合并多个输入流让用户读取?

你是不是可以考虑继承InputStream,像这样。

Java code?12345678  public class MultipleInputStream extends InputStream {     public MultipleInputStream(In……


我还是有点不清楚,你是让用户上传多个文件?还是从服务器下载?
------解决方案--------------------
引用:
引用:SequenceInputStream 用来将2个流合并在一起,输出后,两个文件就变成一个文件了.

可以看下ZipOutputStream,将多个文件压缩,然后将压缩后的文件保存到客户端.

您好,这个主要是从用户的角度不用多次保存,用户本地保存的还是多个文件,所以SequenceInputStream不合适;
ZipO……


一个保存操作,用一个类,处理多个流也是可以的啊,楼主在疑问什么呢?
得到两个流,分别处理,保存在客户端两个

InputStream in1 = ...;
InputStream in2 = ...;

byte[] buf1 = new byte[2048];
byte[] buf2 = new byte[2048];

int len1 = in1.read(buf1);
int len2 = in2.read(buf2);

OutputStream o1 = new FileOutputStream("d://copytest1.txt");
OutputStream o2 = new FileOutputStream("d://copytest2.txt");
o1.write(buf1,0,len1);
o2.write(buf2,0,len2);

in1.close();
in2.close();
o1.close();
o2.close();

应该是下载方式的问题吧?用什么实现在下载?

------解决方案--------------------
就用ZipOutputStream,里面套一个字节数组流生成在内存中以便下载,ByteArrayOutputStream bos=new ByteArrayOutputStream();ZipOutputStream zos=new ZipOutputStream(bos)什么文件服务器ip,文件路径啊。你只要从你云端获得的这些流里面循环读取,一个流就putNextEntry(String name);//文件名自订吧。然后就读取这个inputStream进行write到这个zos中。最后在用这个bos转换成ByteArrayInputStream来提供下载不就行了