Java 多次读取同一URL,第二次未获取数据
我有以下代码。一个连接,然后从该连接获取一个输入流并从输入流读取。现在我想再次使用相同的连接获取输入流,但第二次我没有获取任何数据 为什么会这样?我使用的不是相同的流,而是相同的连接。我们需要再次打开连接吗?请解释Java 多次读取同一URL,第二次未获取数据,java,http,url,inputstream,httpurlconnection,Java,Http,Url,Inputstream,Httpurlconnection,我有以下代码。一个连接,然后从该连接获取一个输入流并从输入流读取。现在我想再次使用相同的连接获取输入流,但第二次我没有获取任何数据 为什么会这样?我使用的不是相同的流,而是相同的连接。我们需要再次打开连接吗?请解释 URL url=new URL("https://www.google.co.in/"); HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection(); httpURLConnection.
URL url=new URL("https://www.google.co.in/");
HttpURLConnection httpURLConnection=(HttpURLConnection)
url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.connect();
InputStream inputStream=httpURLConnection.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
System.out.println("**********************************");
/*Reading 2nd time*/
InputStream is=httpURLConnection.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(is));
String inputLines=null;
while ((inputLine = bf.readLine()) != null)
System.out.println(inputLines);
bf.close();
您无法获取数据,因为流中没有任何内容。要获取它,您必须发送另一个“获取”请求 每个HttpURLConnection实例用于发出单个请求 请参考javadoc
第二次调用
getInputStream()
不会给你一个新的流,它只会给你一个你已经读过的流,而这个流已经没有什么可读的了
如果您真的想读两遍内容,我建议您在第一次阅读时将其复制到字符串
(如果内容不是文本,则复制到字节[]
)。然后,您可以从字符串
或字节[]
中读取它两次
如果内容特别大,另一种选择是将其复制到临时文件。为什么要多次阅读?只需将值保存在变量中
List<String> inputLines =new ArrayList<String>();
String inputLine;
while ((inputLine = in.readLine()) != null)
inputLines.add(inputLine);
List inputLines=new ArrayList();
字符串输入线;
而((inputLine=in.readLine())!=null)
输入行。添加(输入行);
通过connect()方法或openconnection()方法发送“GET”请求?如果connect发出实际的“GET”请求,那么如果我们使用相同的httpurlcconnection实例再次连接,为什么在这种情况下我们得不到结果?我想检查HttpURLConnection的实例实际指的是什么。在上面的代码中,如果在打印星号之后。我再次调用HttpURLConnection.connect,那么我也得不到输入流。为什么会这样?Hirak的回答解释了这一点。