[英]How to read to inputstream in tcp socket communication for multiple formats in java
[英]Read from InputStream in multiple formats
我正在嘗試編寫一個讀取HTTP請求和響應並解析它們的類。 由於標題是普通文本,因此使用BufferedReader和readLine方法讀取它們似乎最容易。 這顯然不會對數據體造成影響,因為它可能是二進制的,所以我想在讀取頭文件后切換到讀取原始字節。
現在,我正在做這樣的事情:
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.