zoukankan      html  css  js  c++  java
  • 聊聊、BufferedReader readLine 方法

    最近跟一个小伙伴在群里聊天,他说用 readLine 读取网络设备的数据为什么会这么慢?

    说实话,平时我们用 BufferedReader 、BufferedWriter 比较多,但是一般是读取文件较多。

    代码:

    Socket socket = new Socket();

    socket.bind(new InetSocketAddress("hostname", port));

    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    String line = "";

    while(true){

    line = br.readLine();

    if(line == null){

      break;

    }

    System.out.println(line);

    }

    问题是上面的输出很慢,看了上面的代码,有不少的问题,不只是输出慢,程序很有可能卡死在这里。如果优化,应该这样写:

    while(null != (line = br.readLine())){

    // todo

    }

    readLine 有几点需要注意:

    1.readLine 方法如果获取不到数据,会一直阻塞,而不是返回 null,除非发生异常或者发送方 close

    2.如果数据没有行换符(' ')、回车(' ')、或者(' '),那么 readLine 不会返回,直到缓存满或者文件结尾为止,缓存是 8192 个字符

    3.BufferedReader 不适用网络传输

    最后,上面慢的原因是,数据没有换行符,回车符,一直到 8192 字符缓存满才返回,所以慢。

  • 相关阅读:
    关于响应式框架的定位不了元素的坑
    pychrom 中文版
    firebug定位工具很强大
    查询数据中所有表名
    java解析Json中获取Array字段值及嵌套Json对象
    mysql表操作
    集合框架(二)
    集合框架
    Java API(二)
    JDBC入门
  • 原文地址:https://www.cnblogs.com/xums/p/12650575.html
Copyright © 2011-2022 走看看