2010-02-03 69 views
3

所以我有以下代碼打開一個輸入流,併成功地收集信息:然而如何爲Java InputStream元素髮送EOF?

   httpInput = httpConnection.openInputStream();    

      sb= new StringBuffer();    

      while (ch != -1) 
      { 
       ch = httpInput.read(); 
       sb.append((char)ch); 
      } 

,當我嘗試使用相同的字符串(sb.toString())在另一方法中,我得到一個錯誤說明「期待文件結束」。那麼我如何將EOF字符附加到我的字符串?注意:響應基本上是來自遠程服務器的xml文檔。

所以當代碼到達 「解析」 線,它使我有誤差以上:(sb.toString()的getBytes())

雙=新ByteArrayInputStream進行; doc = docBuilder.parse(bis);

我正在編寫這個黑莓應用程序。

交流

回答

2

如果你只是想讀取流成字節數組,然後嘗試使用IOUtilities.streamToBytes()

+0

中有一個read(byte [] b,int off,int len)方法,這個工作就像一個冠軍!我喜歡它如何將代碼濃縮到1行!不錯。謝謝marc !!!! – sexitrainer 2010-02-03 21:20:33

2

ch = httpInput.read();的最後一個電話給你值-1,然後將其添加到您的StringBuffer sb。但是通過這個代碼read()可以告訴你它已經到達流的末尾,它不是你應該追加的字符。

你可以這樣做,而不是:此代碼

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
while (true) 
{ 
    ch = httpInput.read(); 
    if(ch == -1) { 
     break; 
    } 
    out.write(ch); 
} 
String result = out.toString("utf-8"); // or whatever charset is used 

// or if you only need another InputStream: 
ByteArrayInputStream in = new ByteArrayInputStream(out.getBytes()); 
2

一個大問題是,你似乎是閱讀一次一個字節,假設每個字節是一個字符。這不一定是真實的,但會發生在一些簡單的ASCII編碼上。一次讀取一個字節也可能非常緩慢。

我不知道有EOF字符這樣的東西 - 通常「EOF」是從像read()方法返回的值-1,但這不是一個字符。

這種方法是什麼?它期望什麼樣的性格 - 你能找到答案嗎?那麼只需添加?目前還不清楚你真的想在那裏做什麼。

+0

不幸的是,黑莓api不允許我使用微型InputStream對象一次讀取多於1個字節。如果有任何其他輸入流對象(在黑莓API中),我可以使用一次讀取超過一個字節,請讓我知道,所以我可以使用它。謝謝! – sexitrainer 2010-02-03 20:32:26

+2

在InputStream – 2010-02-03 20:48:33

1

也許XML解析器中的錯誤消息「Expecting end of file」與EOF字符無關。這可能表明一些XML語法的問題(可能是,XML解析器遇到多個字符的格式良好的XML文檔結束後)