如何更改Inputstream Reader中的缓冲区大小?

问题描述:

我正在使用WebService获取数据,但我只获得了62条记录的9条记录,我认为这是缓冲区大小的问题,对不对?如何更改Inputstream Reader中的缓冲区大小?

我使用以下代码从WebService获取数据,并且Webserivce是在php中开发的。

public JSONObject PostConnectionObject(String strUrl,ArrayList<NameValuePair> alstNameValuePair) { 
     InputStream mInputStream = null; 
     try { 
      //This is the default apacheconnection. 
      HttpClient mHttpClient = new DefaultHttpClient(); 

      //Pathe of serverside 
      HttpPost mHttpPost = new HttpPost(strUrl); 
      if(alstNameValuePair!=null) 
      { 
       //post the valur you want to pass. 
       mHttpPost.setEntity(new UrlEncodedFormEntity(alstNameValuePair)); 
      } 

      //get the valu from the saerverside as response. 
      HttpResponse mHttpResponse = mHttpClient.execute(mHttpPost); 
      HttpEntity mHttpEntity = mHttpResponse.getEntity(); 
      mInputStream = mHttpEntity.getContent(); 

      } 
      catch (Exception e) { 
      // TODO Auto-generated catch block 
      Log.e(strTAG,"Error in HttpClient,HttpPost,HttpResponse,HttpEntity"); 
      } 

     String strLine = null; 
     String strResult = null; 

     //convert response in to the string. 
     try { 
       BufferedReader mBufferedReader = new BufferedReader(new InputStreamReader(mInputStream,"iso-8859-1"), 8); 
       StringBuilder mStringBuilder = new StringBuilder(); 
       while((strLine = mBufferedReader.readLine()) != null) { 
       mStringBuilder.append(strLine + "\n"); 
       } 
       mInputStream.close(); 
      strResult = mStringBuilder.toString(); 
      System.out.println("Value of Result :"+strResult); 
      } 
      catch (Exception e) { 
       // TODO Auto-generated catch block 
       //System.out.println("Error in BufferedReadering"); 
       Log.e(strTAG,"Error in BufferedReadering"); 
      } 
+0

请寄给我你的上面的例子。 –

InputStreamReader的文档没有提供设置它使用的缓冲区大小的方法。缓冲区的大小取决于实现者。

在你的代码中,你使用BufferedReader()的缓冲区大小为8。所以你可以通过改变8(BufferedReader()的第二个参数)来改变BufferedReader缓冲区的大小。

虽然我不认为这会有所帮助。即使缓冲区的大小远小于行的长度,BufferedReader仍会返回整行。

你的代码看起来很简单,我怀疑数据永远不会被发送。

+0

感谢user804056,真的很好的描述,我试图改变8(BufferReader()的第二参数)为16,32等,但你没有任何影响,我有相同数量的记录(数据)。我不能完全理解你最后一句话,你能解释一下吗? –

+0

问题中的代码看起来正确。如果只有9条记录被打印到System.out,那么我怀疑只有9条记录是由服务器发送的,并且您应该接下来查看服务器上的代码。 我会使用[curl](http://curl.haxx.se/docs/manpage.html)来查看服务器是否发回所有记录。 – abh

+0

但是当我在网络浏览器中打开webserive链接以便显示完整的数据时,我不知道什么是攻丝,为什么? –