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