![](/img/trans.png)
[英]How to run BufferedReader more than once in a command prompt, to input a value?
[英]Read from a BufferedReader more than once in Java
我在Java中有以下代码:
HttpURLConnection con = (HttpURLConnection)new URL(url).openConnection();
con.connect();
InputStream stream = con.getInputStream();
BufferedReader file = new BufferedReader(new InputStreamReader(stream));
此时,我在搜索内容时从头到尾读取文件:
while (true)
{
String line = file.readLine();
if (line == null)
break;
// Search for something...
}
现在,我想在文件中搜索其他内容, 而无需打开另一个URL连接 。
出于与该问题无关的原因,我希望避免在“单个文件扫描”中搜索这两种内容。
我可以reset
后退文件吗?
如果是,我应该将其应用于InputStream
对象, BufferedReader
对象还是同时应用于这两者?
如果不是,那么我应该简单地关闭文件并重新打开它吗?
如果是,我应该将其应用于InputStream
对象, BufferedReader
对象还是同时应用于这两者?
如果不是,我又该如何再次清除文件,而无需再次读取URL连接?
您可以使用reset()
倒带文件,前提是您已将mark()
设置为要倒带的位置。 这些方法应在装饰器(即BufferedReader
上调用。
但是,您可能需要重新考虑设计,因为您可以轻松地将整个文件读入某种数据结构(甚至是字符串列表,或由字符串支持的某些流)并多次使用数据。
使用以下方法:
mark
skip
reset
仅当markSupported()
返回true
您才可以这样做。 请注意,实际上读者通常不会添加此功能,而是将其委托给包装的输入流,因此请始终调用markSupported()
并记住,对于不支持此功能的流,它可能返回false
。
例如,基于URL的流确实可能发生:思考,如何重置源自远程服务器的流。 这可能需要客户端缓存已下载的所有内容。
我通常最终使用InputStreamSource之类的东西来使重新读取变得方便。 当我处理连接时,我发现使用内存或磁盘假脱机策略进行重新读取很有用。 使用阈值选择存储位置,第一次读取时将其“放入”线轴,然后在后续读取时从线轴重新读取。
编辑:还发现具有相同目的的番石榴ByteSource和CharSource。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.