与使用相同服务器端服务的iPhone App相比,HttpURLConnection.getInputStream需要花费大量时间。

以下代码用于该服务:

         date= new java.util.Date();
         Log.d("time","Time Stamp before posting  "+new Timestamp(date.getTime()));

         URL ur= new URL(url);
         HttpURLConnection conn = (HttpURLConnection) ur.openConnection();
         conn.setRequestProperty("Connection", "close");
         conn.setReadTimeout(10000);
         conn.setConnectTimeout(15000);
         conn.setRequestMethod("POST");
         conn.setDoInput(true);
         conn.setDoOutput(true);
         OutputStream os = conn.getOutputStream();
         BufferedWriter writer = new BufferedWriter(
                 new OutputStreamWriter(os, "UTF-8"));
         writer.write(getQuery(nameValuePairs));
         writer.close();
         os.close();
         conn.connect();

         StringBuffer response=null;
         try{
             Log.d("time","Time Stamp bfr InputStream  "+new Timestamp(date.getTime()));

             InputStream is = conn.getInputStream();

             date= new java.util.Date();
             Log.d("time","Time Stamp aftr InputStream  "+new Timestamp(date.getTime()));

             BufferedReader rd = new BufferedReader(new InputStreamReader(is));
             String line;
             response = new StringBuffer();
             while((line = rd.readLine()) != null) {
                 response.append(line);
                 response.append('\r');
             }
             rd.close();
             response.toString();
             result=response.toString();

         } catch (Exception e) {

        }

为了检查服务在哪里花费时间,我将日志条目打印到TimeStamp。

该过程的平均时间如下:



是否知道为什么输入流会花费很多时间,从而使整个服务非常慢?

最佳答案

您没有衡量自己想衡量的东西。除非您调用getInputStream()或getResponseCode(),否则什么都不会写入服务器。因此,您实际上正在测量:

  • 连接时间
  • 传输时间
  • 在服务器上的处理时间

  • 当您认为自己只是在测量getInputStream()时间时。

    原因是HttpURLConnection通过缓冲所有输出来自动设置内容长度 header 。您可以通过使用分块传输模式来避免这种情况。然后至少您会看到时间真正在哪里。

    关于android - HttpURLConnection.getInputStream非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17439802/

    10-13 03:28