简单的上传速度测试

时间:2013-11-11 09:55:36

标签: java file-upload upload httpurlconnection speed-test

我创建了简单的上传速度测试,请参阅以下代码:

try {
    HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
    byte [] array = new byte [1 * 1024 * 1024]; // 1 Mb data test
    MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    multipartEntity.addPart("", new ByteArrayBody(array, MIME.ENC_BINARY, ""));
    conn.addRequestProperty(multipartEntity.getContentType().getName(), multipartEntity.getContentType().getValue());

    conn.setReadTimeout(connTimeout);
    conn.setConnectTimeout(connTimeout);
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");

    long start = System.currentTimeMillis();
    DataOutputStream dataStream = new DataOutputStream(conn.getOutputStream());
    dataStream.write(array);

    String CRLF = "\r\n"; // Line separator required by multipart/form-data.
    String boundary = multipartEntity.getContentType().getValue().replaceAll(".*boundary=", "");
    dataStream.writeBytes("--" + boundary + CRLF);

    dataStream.flush();
    dataStream.close();

    int responseCode = conn.getResponseCode();    
    long end = System.currentTimeMillis();

    if (responseCode == HttpURLConnection.HTTP_OK) {
        long speed = Math.round(array.length/ (end-start));
        } else {
            // something went wrong
        }

一切都很完美,但我的问题很小。在像wifi这样的快速网络上,发送1 Mb的数据需要不到一秒的时间。但在较慢的网络上,它可能需要10-30秒,具体取决于网络和信号。所以我意识到,不上传固定长度的数据会更好,但是使用时间限制之类的东西 - 所以上传数据的时间不会超过3秒。

问题很简单:)如何实现这一点 - 我的意思是在同一时刻发送数据,计算时间,当限制到期时停止发送,看看我发送了多少并计算速度?

2 个答案:

答案 0 :(得分:1)

如何使用像二进制搜索这样的东西,所以你从少量数据开始,并保持一倍的大小,直到你的结果时间足够长,以便合理地了解带宽。

答案 1 :(得分:1)

您发送的字节数不是 重要的。即使您上传50 KB,除以上传所花费的毫秒(对于数量相对较小的快速连接),除法将产生相对较大的数字。结论:安全并减少发送的字节数。