title: HTTPURLConnection.getInputStream() Takes a very long time?
body: <p>I'm uploading an image file using a HttpURLConnection which takes about 3 seconds for a 5MB file with all the headers, but the moment I open an InputStream with .getInputStream(), the method takes about 8+ seconds to return a stream with. Which is an issue because it seems the upload progress bar gives a bad UX if I have multiple images to upload, they have a considerable pause between each upload, so the progress bar just stops for a couple of seconds between uploads. I've done some googling but no one else seems to have an issue with it?</p>
  
  <p>Normally I would assume the server is slow, but seeing as uploading only takes a couple of seconds, downloading the word 'success' or 'fail' shouldn't really be that much of an issue!</p>
  
  <p>Heres some code! Am I setting anything up wrong initially? 
  <em>Note: This is also within an AsyncTask</em></p>
  
  <pre><code>    ByteArrayInputStream fileInputStream = null;
  
      try {
          fileInputStream = new ByteArrayInputStream(dObject.Data);
  
      } catch (Exception e) {
          e.printStackTrace();
      }
  
  
      String lineEnd = "\r\n";
      String twoHyphens = "--";
      String boundary = "*****";
      String Tag="3rd";
      try
      {
          //------------------ CLIENT RE QUEST        
          Log.e(Tag,"Inside second Method");      
  
          // Open a HTTP connection to the URL    
          URL url = new URL(_urlString);
          //connectURL is a URL object
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  
          // Allow Inputs
          conn.setDoInput(true);
  
          // Allow Outputs
          conn.setDoOutput(true);
  
          // Don't use a cached copy.
          conn.setUseCaches(false);
  
          // Use a post method.
          conn.setRequestMethod("POST");
  
          conn.setRequestProperty("Connection", "Keep-Alive");
  
          conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
  
          DataOutputStream dos = new DataOutputStream( conn.getOutputStream() );
  
          dos.writeBytes(twoHyphens + boundary + lineEnd);
          //dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + _fileLocation +"\"" + lineEnd);
          dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + _fileLocation +"\"" + lineEnd);
  
          dos.writeBytes(lineEnd);
  
          Log.e(Tag,"Headers are written");
  
          // create a buffer of maximum size
          int bytesAvailable = fileInputStream.available();
          int maxBufferSize = 1024;
          int bufferSize = Math.min(bytesAvailable, maxBufferSize);
          byte[] buffer = new byte[bufferSize];
  
  
  
          // read file and write it into form...  
          int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  
  
          while (bytesRead &gt; 0) {
              dos.write(buffer, 0, bufferSize);
  
              //int value = (int)(((float)((float)totalRead / (float) fileSize)) * 100);
  
              totalRead += bytesRead;
              //Publish the progress out to be displayed
              publishProgress(totalRead);
  
  
  
              bytesAvailable = fileInputStream.available();
              bufferSize = Math.min(bytesAvailable, maxBufferSize);
              bytesRead = fileInputStream.read(buffer, 0, bufferSize);
          }
  
          // send multipart form data necesssary after file data...
          dos.writeBytes(lineEnd);
          dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
  
  
          // close streams
          Log.e(Tag,"File is written");
          fileInputStream.close();
          dos.flush();
  
          Log.e("TIME", "PRE GETINPUTSTREAM");
          InputStream is = conn.getInputStream(); 
          Log.e("TIME", "POST GETINPUTSTREAM");
          //  retrieve the response from server
          int ch;
  
  
          //Build the respose and log
          StringBuilder b =new StringBuilder();
          while( ( ch = is.read() ) != -1 ){
              b.append( (char)ch );
          }
          String s=b.toString();      
          Log.i("Response",s);
          dos.close();
  
          return;
      }
      catch (MalformedURLException ex)
      {
          ErrorHandler.get().e("3");
      }
  
      catch (IOException ioe)
      {
          ErrorHandler.get().e("2");
      }
  </code></pre>