2012-02-15 76 views
1

我的代碼中有一個奇怪的錯誤。我試圖用char buffer從InputStreamReader中讀取一些字符,並將其附加到StringBuilderJava StringBuilder不會追加整個InputStream

該片段是在這裏:

char[] buffer = new char[4096]; 
int numRead = 0; 
webResource = new StringBuilder(""); 
while ((numRead = reader.read(buffer, 0, 4096)) != -1) 
      { 
       System.out.println("Capacity before: "+webResource.capacity()); 
       webResource.append(buffer, 0, numRead); 
       System.out.println("Capacity after: "+webResource.capacity()); 
      } 

System.out.println()僅用於調試的目的。

我試圖閱讀InputStream有147 781個字符。 while循環中的前兩個是一切正常,我將字符讀入緩衝區,然後將其附加到webResource (StringBuilder)

但在第三次迭代時,我讀取緩衝4096個字符,但只有1446個字符被附加到webResource (StringBuilder)

我一直在Eclipse中調試代碼,並在觀看變量webResource時發現,在第三次迭代(追加1446個字符後)後,變量的內容僅以「...」結尾,並且沒有添加新字符在下一次迭代中。奇怪的事情也是,webResource.count正在加入正確(在四次intections後它的值是16 384,等等)。

請問誰能幫忙?我真的不知道爲什麼我不能將整個inputstream添加到StringBuilder的問題在哪裏,我只能追加前9 638個字符。

在此先感謝。

+0

很難說這裏有什麼問題。嘗試發佈一個[SSCCE](http://sscce.org)與'InputStream'來源供我們測試。 – Jeffrey 2012-02-15 23:01:29

+0

請注意,爲什麼不使用:[''IOUtils.toString()'](http://commons.apache.org/io/api-2.0/org/apache/commons/io/IOUtils.html#toString (java.io.InputStream中,%20java.lang.String))? – 2012-02-15 23:02:16

回答

2

您似乎錯誤地解釋了您在調試器中看到的內容。調試器沒有向您顯示stringbuilder的全部內容,因爲它太長了。但它都在那裏,