【问题标题】:Missing first character in many lines while from BufferedReader从 BufferedReader 中缺少多行中的第一个字符
【发布时间】:2017-05-29 08:57:11
【问题描述】:

我正在尝试打印 URL 的内容,但第一个字符在多行中丢失。就像在下面的输出中一样,DOCTYPE、head 和 html 标记中缺少“

我曾尝试在 while 循环中使用 readLine 方法,但它会显示更奇怪的输出,其中包含 DOCTYPE、head 标签丢失并且最后为 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

【问题讨论】:

    标签: java bufferedreader


    【解决方案1】:

    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);
    }
    

    【讨论】:

    • 知道了!谢谢达山
    【解决方案2】:

    这是完整的工作代码。我参考了 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();
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 2016-05-28
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      相关资源
      最近更新 更多