簡體   English   中英

在java中從BufferedReader讀取兩次

[英]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.

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