java - JAVA如何获取上传速度

标签 java android tomcat servlets

我正在研究 android 应用程序,我想构建示例代码来检查上传速度。

我已经构建了上传速度检查方法,但我不确定它是否正常工作。这是因为即使 Android 手机没有正确的互联网连接,我的方法也会返回上传速度

我构建了这样的方法..

首先读取4.6MB的文本文件,然后存入String变量

其次,检查开始时间

第三,使用 post 方法和 nameValuePair 将 4.6MB 的字符串变量发送到 Google 应用引擎(我的谷歌应用引擎。它正在捕获字符串数据。它什么也没做。)

四、查看结束时间

最后,获取(文件大小)/(结束时间 - 开始时间)作为上传速度

这是我的代码...

public double Get_UPload_Speed() throws IOException{
    String file_path =("46.txt");
    File gone = new File(file_path);
    String line = "";
    double filesize = bts.Get_File_Size(file_path);
    int maxsize =  rf.Get_Total_Line(file_path);
    BufferedReader in = new BufferedReader(new FileReader(gone));

    HttpPost httpPost = new HttpPost("http://google.app.engine.address.com");
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
    StringBuilder stringBuilder = new StringBuilder();


    for(int index = 0 ; index < maxsize ; index++){
        if((line = in.readLine()) != null){
            // keep appending line of text to String buffer
            stringBuilder.append(line);         
        }
        else{
            break;
        }
    }
    String UL_Packet = stringBuilder.toString();
    double startTime = System.currentTimeMillis();
    nameValuePair.add(new BasicNameValuePair("content",UL_Packet));
    nameValuePair.add(new BasicNameValuePair("guestbookName", "default"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
            Log.d("UploadManager", "Upload Start: " + startTime + " secs");
        Log.d("UploadManager", "Upload End: " + endTime + " secs");
        Log.d("UploadManager", "Tranfer Time: " + tranferTime + " secs");
        Log.d("UploadManager", "Size of file " + filesize + " MB");
        double endTime = System.currentTimeMillis();
        double tranferTime = (endTime - startTime)/1000;
        double rate = filesize/ tranferTime;         
        Log.d("UploadManager", "Upload speed: "+rate +" Mbps"); 
        return rate;
    }

但是,我不确定这是否是提高上传速度的正确方法。

有什么可靠的方法可以建立上传速度检查方法吗?

谢谢

最佳答案

您尝试过使用 Android TrafficStats 吗?

/** Upload a random string and measure transfer speed */
public double Get_UPload_Speed()
    throws IOException
{
    int        MB         = 1;
    HttpPost   httpPost   = new HttpPost("http://google.app.engine.address.com");
    HttpClient httpClient = DefaultHttpClient();

    /** generate random string */
    char[] chars = "abcdefghijklmnopqrstuvwxyz1234567890";
    StringBuilder sb     = new StringBuilder();
    Random        random = new Random();
    for (int i = 0; i < MB*1024*1024; i++) {
        sb.append(
                chars[random.nextInt(chars.lenght)]);
    }

    long totalTxBytes = TrafficStats.getTotalTxBytes(); 
    long totalRxBytes = TrafficStats.getTotalRxBytes();
    double startTime  = System.currentTimeMillis();

    String UL_Packet = sb.toString();
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
    nameValuePair.add(
            new BasicNameValuePair("content",UL_Packet));
    nameValuePair.add(
            new BasicNameValuePair("guestbookName", "default"));
    httpPost.setEntity(
            new UrlEncodedFormEntity(nameValuePair));

    httpClient.execute(httpPost);

    double endTime = System.currentTimeMillis();
    double tranferTime = (endTime - startTime)/1000;

    double rate = 
        (  TrafficStats.getTotalTxBytes() - totalTxBytes
         + TrafficStats.getTotalRxBytes() - totalRxBytes) / tranferTime;         

    /** Log */
    Log.d("UploadManager", "Upload Start: " + startTime            );
    Log.d("UploadManager", "Upload End:   " + endTime              );
    Log.d("UploadManager", "Tranfer Time: " + tranferTime + " secs");
    Log.d("UploadManager", "Data size:    " + MB          + " MB  ");
    Log.d("UploadManager", "Upload speed: " + rate        + " MB/s"); 

    return rate;
}

关于java - JAVA如何获取上传速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422964/

相关文章:

Firefox 扩展自动更新功能

java - 需要在 Derby 中编写正确的查询

java - 为 WSO2 构建定制的用户存储管理器

android - 在为 MDPI 和 HDPI ANdroid 设计 UI 界面时,我如何解决高度问题?

android - 从标签获取图标并将其加载到图像按钮?

java - Java/Spring Web 应用程序的文件结构

tomcat - 从 war 中删除要部署到 Tomcat 的版本?

为创建 AD 帐户编写了 Java 代码,但发生 LDAP 异常

java - 如何使用 CXF 框架使用受 HTTP 基本身份验证保护的 Web 服务?

android - 为什么有时会抛出 FileNotFoundException