通过java查找服务器互联网带宽以进行流式传输

Mad*_*dhu 3 java streaming servlets

遵循这个主题. 流式传输java servlet中的大型文件.

是否有可能通过java找到当前机器中可用的总互联网带宽?

我想要做的是在通过servlet流式传输大型文件时,根据并行请求的数量和总带宽我试图减少每个请求的流的BUFFER_SIZE.合理?

有没有纯粹的java方式?(没有JNI)

Mar*_*aux 6

也许您可以计算应用程序需要多长时间发送一个包(缓冲区).如果大于x毫秒,则使缓冲区变小.您可以使用原始bufferSize和其他值if (stop - start > 700).

这基于您注意到的主题:

ServletOutputStream out = response.getOutputStream();
InputStream in = [ code to get source input stream ];
String mimeType = [ code to get mimetype of data to be served ];
int bufferSize = 1024 * 4;
byte[] bytes = new byte[bufferSize];
int bytesRead;

response.setContentType(mimeType);

while ((bytesRead = in.read(bytes)) != -1) {
    long start = System.currentTimeMillis();
    out.write(bytes, 0, bytesRead);
    long stop = System.currentTimeMillis();
    if (stop - start > 700)
    {
        bufferSize /= 2;
        bytes = new byte[bufferSize];
    }
}

// do the following in a finally block:
in.close();
out.close();
Run Code Online (Sandbox Code Playgroud)

  • 观众注意:虽然系统自动选择此答案为"已接受",但答案并不正确. (2认同)