[英]Reading from BufferedReader twice in java
我用 Java 構建了一個 Web 服務器,我收到請求(作為套接字)並對其進行處理。 我需要先打印整個請求,然后再處理它。 這是我的代碼片段:
public HttpRequest(Socket socket) throws Exception
{
this.socket = socket;
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
printRequest(input);
// Do More...
}
問題是,從現在開始, BufferedReader 已經結束了,我似乎無法找到讓它回到起點的方法。 printRequest()
方法使用while
循環和readline()
操作打印來自 BufferedReader 的整個請求。
有什么想法可以解決這個問題嗎?
以字符串形式讀入請求;
String request = readUntilEOF(input);
然后用它做任何你想做的事情;
System.out.println(request);
process(request);
doFunThingsWith(request);
從概念上講,當您從它們中讀取時,就會消耗 Streams。 特別是在您從套接字讀取的情況下,數據一讀就消失了。 因此,如果您想重新讀取// Do More
的“流”,您需要創建一個新流並將您收到並存儲在某處的數據提供給它。 或者,如果您想記錄讀取的所有內容,您可以包裝 InputStream 並在最終消費者使用流時立即進行打印,
您不能使用 BufferedReader 讀取內容兩次。 第一次讀取后,將讀取的內容保存在一個變量中以備后用。
您可以讀取byte
數組中的內容,然后在需要時使用ByteArrayInputStream
:
InputStream is = socket.getInputStream();
byte[] content = new byte[is.available()];
is.read(content);
printRequest(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content))));
processRequest(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content))));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.