BufferedReader有一个方法叫readLine(),优点:

1、该方法的作用是每次都读一行,可以省略很多手动拼接buffer的步骤;

2、它比较高效,相对于一个字符/字节地读取、转换、返回来说,它有一个缓冲区,读满缓冲区才返回;一般情况下,都建议使用它们把其它Reader/InputStream包起来,使得读取数据更高效。

3、对于文本读取来说,逐行读取,非常相符。

但是,该方法是阻塞方法,如果不指定buffer大小则readLine(),使用的buffer有8192个字符。在达到buffer大小之前,只有遇到“/r”、"/n"、"/r/n"才会返回,否则一直阻塞。这里我就遇到了该问题,从网上也查到了部分方法:

作者:https://blog.csdn.net/u010595903/article/details/51679018的解决方法如下:

  long start = System.currentTimeMillis();long end = start;try {while( (end - start) < 5000 && true == readDone ) {TimeUnit.MILLISECONDS.sleep(100);end = System.currentTimeMillis();}} catch (InterruptedException e) {e.printStackTrace();}

该作者的思路是:调用该流的close(),readLine()方法则会抛出异常而终止阻塞。如果想实现阻塞了一段时间后自动中断,那么必然是需要异步,用另外一个线程去监视它,执行close()方法,那么程序则会继续往下执行。

参考:https://blog.csdn.net/swingline/article/details/5357581

小结,使用readLine()一定要注意:

  1. 读入的数据要注意有/r或/n或/r/n
  2. 没有数据时会阻塞,在数据流异常或断开时才会返回null
  3. 使用socket之类的数据流时,要避免使用readLine(),以免为了等待一个换行/回车符而一直阻塞

BufferedReader的readLine方法相关推荐

  1. 25. BufferedReader的readLine()方法

    今天复习到写一个文本转化器,客户端发一行字符,服务端转为大写后发回来. 前一天我写的时候,还是没问题的: import java.net.*; import java.io.*;public clas ...

  2. 关于java中BufferedReader的read()及readLine()方法的使用心得

    BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用sock ...

  3. java中br.readline_Java:java中BufferedReader的read()及readLine()方法的使用心得

    BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用sock ...

  4. java readline 实现_基于自定义BufferedReader中的read和readLine方法

    实例如下所示: package day0208; import java.io.FileReader; import java.io.IOException; /* * 自定义读取缓冲区,实现Buff ...

  5. java readline 超时_跳过Java中的BufferedReader readLine()方法

    是否有一种简单的方法可以跳过java中的readLine()方法(如果它花费的时间超过2秒)? 这是我问这个问题的背景: public void run() { boolean looping = t ...

  6. java中readline函数_自定义BufferedReader中read和readLine方法

    BufferedReader中read和readLine方法总结 实例如下所示: package day0208; import java.io.FileReader; import java.io. ...

  7. IO流-ReadLine方法的原理 自定义BufferedReader

    package com.yyq; /** readLine 方法的原理* 无论是读一行,获取读取多个字符其实最终都是在硬盘上一个一个的读取,所以最终使用的都是* read方法一次读一个的发法* 缓冲区 ...

  8. 解决 java BufferedReader.readLine()方法按行读取文件内容中文乱码的问题

    原来的代码如下所示,但是输出的内容都是乱码 public void readLine(String path) {InputStreamReader isr = null;BufferedReader ...

  9. 浅谈BufferedReader中的read()方法和readLine()方法

    浅谈BufferedReader中的read方法和readLine方法 前言:本人比较菜啦,如果有错误,还请大佬指正. 1. read方法 查看API文档我们可以发现BufferedReader类中的 ...

最新文章

  1. android检测内存使用工具--procrank
  2. 使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践--转载
  3. FreeBSD设置IP地址,网关,DNS
  4. 笔记本中美化代码的方法
  5. javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set
  6. 20135337——Linux内核分析:第十七章 模块与设备
  7. linux下配置mysql默认编码utf8
  8. C语言--(四)常用运算符
  9. 07. Declare destructors virtual in polymorphic base classes
  10. python编写音乐标签_如何用PYTHON代码写出音乐
  11. node2vec文献出处_图表示学习入门2——Node2Vec
  12. K8s部署Nexus3管理Docker镜像
  13. 最速梯度下降法及matlab实践,最速下降法以及代码实现
  14. 罗马数字转换python_阿拉伯数字转换成罗马数字
  15. html制作钢铁侠心脏,钢铁侠胸部的“心脏”并非特效,那是怎么放进身体的?...
  16. 摸鱼儿·雁丘词 / 迈陂塘
  17. python进行谱曲_python创作音乐_ 计算机创作,计算音乐
  18. PCI8524 并行8Ch24Bits100Ksps高精度数据采集卡
  19. 计算机颜色偏蓝,电脑整个屏幕颜色不正常偏蓝怎么调回正常颜色?
  20. C | C++定义全局变量的方法

热门文章

  1. next和nextline区别
  2. 火牛单片机rtc时钟配置_RTC硬件时钟设置修改
  3. vue 挂载全局变量
  4. 淘宝网采用什么技术架构来实现网站高负载的(转载)
  5. 思软软件协同oa办公软件标准版产品功能明细介绍
  6. getAttribute
  7. Python 字典学习
  8. 如何破解QQ键盘加密技术?
  9. 第二天 安装部署linux系统
  10. 使用Python代码获取网站反应时间的实战代码