如何将数据放入Java InputStream?

时间:2016-08-18 12:44:58

标签: java string inputstream outputstream

我当前的应用程序需要读取数据并允许用户将其作为文件下载。 服务器端代码与此类似:https://stackoverflow.com/a/55788/3192744 我需要InputStream中的数据,我当前获取InputStream的方法是:

    InputStream getIStream(){
    StringBuilder sb = new StringBuilder();
    String temp = “”;
    while(//there is data to be read from database//){
            temp = //partial data or one entry from database
            //some other modification in temp
            sb.append(temp).append(“\n”);
    }
    exampleString = sb.toString();
    InputStream stream = new ByteArrayInputStream(exampleString.getBytes());
    }

此方法现在有效,因为我的数据非常小,大约1000个字符串,每个大约100个字符,因此有100000个字符。不过,在我开始下载之前,我需要等待整个数据写入一个字符串。此外,随着我​​的数据大小增加,它不适合一个字符串。 那么是否可以在while循环中继续更新InputStream。

要在服务器端读取这些数据,我正在等待返回InputStream的方法,因此可以将InputStream作为方法参数发送,并在更新时继续读取它。

基本上我想实现类似管道的东西,其中正在发送来自数据库输出的修改后的字符串,并且在接收端数据被放入文件供用户下载,并且用户的下载过程可以在数据开始时启动从数据库中读取。

1 个答案:

答案 0 :(得分:0)

问题是您将所有数据汇总到StringBuilder(以及稍后将InputStream写入ServletOutputStream),而您可以将其写入ServletResponse。方式。

正如我的评论中提到的,如果您不需要输出二进制数据,我建议使用PrinterWriter的{​​{1}}而不是OutputStream,但它会同样有效

使用PrinterWriter

PrinterWriter writer = ServletResponse.getWriter();
while(/*there is data to be read from database*/){
        temp = //partial data or one entry from database
        //some other modification in temp
        writer.println(temp);
}
writer.close();

使用ServletOutputStream

OutputStream out = ServletResponse.getOutputStream();
while(/*there is data to be read from database*/){
        temp = //partial data or one entry from database
        //some other modification in temp
        out.write(temp.getBytes());
        out.write('\n');
}
out.close();