-3

我在 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()打印来自 BufferedReader 的整个请求)。whilereadline()

有什么想法可以解决这个问题吗?

4

4 回答 4

0

以字符串形式读入请求;

String request = readUntilEOF(input);

然后用它做任何你想做的事情;

System.out.println(request);
process(request);
doFunThingsWith(request);
于 2012-11-27T16:01:51.357 回答
0

从概念上讲,当您从它们中读取时,就会消耗流。特别是在您从套接字读取的情况下,数据一经读取就消失了。因此,如果您想重新读取“流”,// Do More您需要创建一个新流并将您收到并存储在某处的数据提供给它。或者,如果您想记录读取的所有内容,您可以包装 InputStream 并在最终消费者消费流后立即进行打印,

于 2012-11-27T16:02:12.213 回答
0

您不能使用 BufferedReader 两次读取内容。第一次读取后,将读取的内容保存在变量中以供以后使用。

于 2012-11-27T16:02:22.740 回答
0

您可以读取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))));
于 2012-11-27T16:08:31.180 回答