Java 下载servlet非常慢

Java 下载servlet非常慢,java,jsp,tomcat,servlets,Java,Jsp,Tomcat,Servlets,我已经编写了一个servlet,它将从服务器位置下载文件。在我们自己的内部网中,下载速度似乎非常慢,而且当我在浏览器中安装Adobe插件时,如果我正在下载PDF文件,Adobe插件将在下载PDF时显示进度条,但在我的情况下不会发生这种情况!下面是我的代码!我不应该以附件的形式回复吗 PrintWriter out = response.getWriter(); response.setContentType("APPLICATION/OCTET-STREAM"); response.setInt

我已经编写了一个servlet,它将从服务器位置下载文件。在我们自己的内部网中,下载速度似乎非常慢,而且当我在浏览器中安装Adobe插件时,如果我正在下载PDF文件,Adobe插件将在下载PDF时显示进度条,但在我的情况下不会发生这种情况!下面是我的代码!我不应该以附件的形式回复吗

PrintWriter out = response.getWriter();
response.setContentType("APPLICATION/OCTET-STREAM");
response.setIntHeader("Refresh", 1);
response.setHeader("Content-Disposition",
    "inline; filename=\"" + fileNameWithExtension
        + "\"");
FileInputStream fileInStream = new FileInputStream(
        filePathWithExtension);
BufferedInputStream bufferInStream = new BufferedInputStream(
                fileInStream);
int cnt;
while ((cnt = bufferInStream.read()) != -1) {
    out.write(cnt);
}
fileInStream.close();
out.close();
不确定是否有更好的方法。基本上,我尝试将我的一个dotnet代码转换成这个javaservlet。与此相比,当前的.NET代码非常快


它托管在Apache Tomcat上,而.NET代码托管在IIS上。

一次读取和写入一个字节的效率非常低。Java中复制流的规范方法如下:

byte[] buffer = new byte[8192]; // or more if you like
int count;
while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

您不应该使用
编写器
,在这里,请使用
输出流。

显示进度条,您必须设置在响应标题中检索的文档的大小(查看响应类中的示例)。速度在某种程度上取决于每次读/写操作中检索的字节数。@NorbertvanNobelen谢谢!是的,我现在发现了一些关于尺寸的东西,并尝试使用它。还有速度,我需要为字节设置任何变量吗?在tomcat中的某个地方?为了提高速度,Thomas(下面)的方法将起作用(正如他所说:调试可能是必要的)。当我尝试使用偏移量读取时,我得到了错误-
java.lang.IllegalStateException:getOutputStream()已被调用用于此响应