我有以下代码。连接,然后从该连接获取输入流并从输入流中读取。现在我想重用相同的连接再次获取输入流,但第二次我没有得到任何数据。
为什么会这样?我没有使用相同的流但是连接相同。我们是否需要再次打开连接?请解释。
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();
答案 0 :(得分:2)
第二次拨打getInputStream()
不会给你一个新流,它只会给你一个你已经读过的流 - 而且该流没有任何东西可供阅读。
如果您确实想要阅读两次内容,我建议您在第一次阅读时将其复制到String
(如果内容不是文字,则复制到byte[]
。然后,您可以从String
或byte[]
另一种选择,如果内容特别大,则将其复制到临时文件中。
答案 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);