我当前的应用程序需要读取数据并允许用户将其作为文件下载。 服务器端代码与此类似: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作为方法参数发送,并在更新时继续读取它。
基本上我想实现类似管道的东西,其中正在发送来自数据库输出的修改后的字符串,并且在接收端数据被放入文件供用户下载,并且用户的下载过程可以在数据开始时启动从数据库中读取。
答案 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();