多次从同一个URL读取,而不是第二次获取数据

时间:2014-05-20 07:13:16

标签: java http url inputstream 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();

4 个答案:

答案 0 :(得分:2)

第二次拨打getInputStream()不会给你一个新流,它只会给你一个你已经读过的流 - 而且该流没有任何东西可供阅读。

如果您确实想要阅读两次内容,我建议您在第一次阅读时将其复制到String(如果内容不是文字,则复制到byte[]。然后,您可以从Stringbyte[]

中读取两次

另一种选择,如果内容特别大,则将其复制到临时文件中。

答案 1 :(得分:0)

您没有获取数据,因为流中没有任何内容。要获得它,您必须发送另一个“GET”请求

答案 2 :(得分:0)

  

每个HttpURLConnection实例用于发出单个请求

请参考javadoc

http://download.java.net/jdk7/archive/b123/docs/api/java/net/HttpURLConnection.html

答案 3 :(得分:-1)

为什么要多次阅读?只需将值保存在变量中即可。

List<String> inputLines =new ArrayList<String>();
String inputLine;
while ((inputLine = in.readLine()) != null) 
inputLines.add(inputLine);