Java SequenceInputStream

时间:2013-04-26 16:25:26

标签: java file stream inputstream

我尝试将多个文件从我的服务器(NanoHttpd)发送到我的客户端(Apache DefaultHttpClient)。
我的方法是通过NanoHttpd的一个Response发送多个文件 为此,我想使用SequenceInputStream 我正在尝试连接多个文件,通过响应(InputStream)发送它们,并使用我的客户端在一个单独的文件中再次写入每个文件。
在Serverside上我称之为:

List<InputStream> data = new ArrayList<InputStream>(o_file_path.size());
for (String file_name : files)
{
    File file = new File(file_name);
    data.add(new FileInputStream(file));
}
InputStream is = new SequenceInputStream(Collections.enumeration(data));
return new NanoHTTPD.Response(HTTP_OK, "application/octet-stream", is);

现在我的问题是如何正确接收和拆分文件 我在我的客户端上尝试过这种方式,但它不起作用:

int read = 0;
int remaining = 0;
byte[] bytes = new byte[buffer];

// Read till the end of the Stream
while ( (read != -1) && (counter < files.size()))
{
    // Create a .o file for the current file
    read = 0;
    remaining = is.available();

    // Should open each Stream          
    while (remaining > 0)
    {
        read = is.read(bytes);
        remaining = remaining - read;
        os.write(bytes, 0, read);
    }

    os.flush();
    os.close();
}

这样我想要遍历所有Stream(直到读取== 1,或者我知道不再有文件),并将任何流读入文件。

我似乎明白了一些开创性的错误,因为is.available()总是0 谁能告诉我如何从这个SequencedInputStream中正确阅读,或者如何解决我的问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

它不会以这种方式工作。 SequenceInputStream将在一个实心字节流中合并所有输入流。没有分隔符或EOF。我建议放弃这个想法,寻找不同的方法。