2017-05-29 207 views
0

我想要打印一个URL的内容,但第一个字符在多行中缺失。像在下面的输出中,“<”在DOCTYPE,head和html标记中缺失。来自BufferedReader的许多行中缺少第一个字符

我曾尝试在while循环中使用readLine方法,但它显示更奇怪的输出与DOCTYPE,头标记缺失和null在最后。

代码1:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

public class urlConnect { 
public static void main(String[] args) throws Exception { 
    URL urlObj = new URL("https://soundcloud.com"); 
    URLConnection conn = urlObj.openConnection(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    while ((br.read()) != -1) { 
    System.out.println((br.readLine())); 
    } 
} 
} 

输出1:

!DOCTYPE html> 
 
<html lang="en"> 
 
head> 
 
<meta charset="utf-8"> 
 
    
 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
 
    
 
... 
 
... 
 
... 
 
</body> 
 
/html>

代码2:

while ((br.readLine()) != null) { 
System.out.println((br.readLine())); 
} 

输出2:

<head> 
 
    
 

 
    <link rel="dns-prefetch" href="//style.sndcdn.com"> 
 
    <link rel="dns-prefetch" href="//api-v2.soundcloud.com"> 
 
    <link rel="dns-prefetch" href="//secure.quantserve.com"> 
 
    <link rel="dns-prefetch" href="//api.soundcloud.com"> 
 
    <link rel="dns-prefetch" href="//i1.sndcdn.com"> 
 
    <link rel="dns-prefetch" href="//i3.sndcdn.com"> 
 
    <link rel="dns-prefetch" href="//wis.sndcdn.com"> 
 
    <link rel="dns-prefetch" href="//pixel.quantserve.com"> 
 
    ... 
 
    ... 
 
    ... 
 
    <script type="text/javascript">window.__sc_version = "1495803442"; 
 
    
 
    
 
    
 
</body> 
 
null

回答

2

Here'sBufferedReader.read()的Javadoc,这就是它说:

读取单个字符。

返回: 读取的字符,如之间的整数0到65535(0x00-0xffff),或-1,如果流的末尾已到达

现在,让我们一看代码:

while ((br.read()) != -1) { 
    System.out.println((br.readLine())); 
} 

要检查返回值read,看是否流的末尾已到达。但是,您不打印该值(它不存储在任何参考中,因此比较后会丢失)。理想情况下,您需要将该值与整行一起打印出来,例如:

String line; 
while((line = br.readLine()) != null){ 
    System.out.println(line); 
} 
+0

Got it!谢谢Darshan –

0

以下是完整的工作代码。我提到Oracle Java文档https://docs.oracle.com/javase/tutorial/networking/urls/readingURL.html

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import java.net.URL; 
import java.net.URLConnection; 


public class TestURL 
{ 
     public static void main (String[] args) throws java.lang.Exception 
     { 
     URL oracle = new URL("https://soundcloud.com/"); 
     BufferedReader in = new BufferedReader(
     new InputStreamReader(oracle.openStream())); 

     String inputLine; 
     while ((inputLine = in.readLine()) != null) 
      System.out.println(inputLine); 
     in.close(); 
     } 
}