簡體   English   中英

以多種格式從InputStream讀取

[英]Read from InputStream in multiple formats

我正在嘗試編寫一個讀取HTTP請求和響應並解析它們的類。 由於標題是普通文本,因此使用BufferedReaderreadLine方法讀取它們似乎最容易。 這顯然不會對數據體造成影響,因為它可能是二進制的,所以我想在讀取頭文件后切換到讀取原始字節。

現在,我正在做這樣的事情:

InputStream input=socket.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(input));
BufferedInputStream binstream=new BufferedInputStream(input);

問題是BufferedReader正在提前讀取並吞噬流中的所有二進制數據,然后才有機會通過binstream獲取它。

有沒有辦法阻止它在每次調用readLine時超出換行符讀取? 或者是否有更好的方法來讀取原始二進制數據后的單行ASCII文本?

Java中已經有一個用於處理HTTP請求和響應的類。 您應該使用它而不是嘗試自己解析響應。 解析HTTP響應比您想象的更困難,因為您必須處理不同的編碼方法。 它不是響應有效負載中的原始二進制數據。 HttpURLConnection類將為您解析標頭,並為有效負載提供InputStream。

http://download.oracle.com/javase/1.4.2/docs/api/java/net/HttpURLConnection.html

如果您不想使用像Konstantin建議的現成HTTP客戶端/服務器實現,DataInputStream具有readLine方法。 它已被棄用,因為它沒有進行正確的轉換(主要是直接字節 - > char轉換),但我認為對於純ASCII標題行,你應該是好的。

(您應該在DataInputStream下放置一個BufferedInputStream,因為readLine會單獨讀取每個字節。)

commons-httpclient可能會為您節省大量工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM