BufferedReader的readLine方法
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()一定要注意:
- 读入的数据要注意有/r或/n或/r/n
- 没有数据时会阻塞,在数据流异常或断开时才会返回null
- 使用socket之类的数据流时,要避免使用readLine(),以免为了等待一个换行/回车符而一直阻塞
BufferedReader的readLine方法相关推荐
- 25. BufferedReader的readLine()方法
今天复习到写一个文本转化器,客户端发一行字符,服务端转为大写后发回来. 前一天我写的时候,还是没问题的: import java.net.*; import java.io.*;public clas ...
- 关于java中BufferedReader的read()及readLine()方法的使用心得
BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用sock ...
- java中br.readline_Java:java中BufferedReader的read()及readLine()方法的使用心得
BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用sock ...
- java readline 实现_基于自定义BufferedReader中的read和readLine方法
实例如下所示: package day0208; import java.io.FileReader; import java.io.IOException; /* * 自定义读取缓冲区,实现Buff ...
- java readline 超时_跳过Java中的BufferedReader readLine()方法
是否有一种简单的方法可以跳过java中的readLine()方法(如果它花费的时间超过2秒)? 这是我问这个问题的背景: public void run() { boolean looping = t ...
- java中readline函数_自定义BufferedReader中read和readLine方法
BufferedReader中read和readLine方法总结 实例如下所示: package day0208; import java.io.FileReader; import java.io. ...
- IO流-ReadLine方法的原理 自定义BufferedReader
package com.yyq; /** readLine 方法的原理* 无论是读一行,获取读取多个字符其实最终都是在硬盘上一个一个的读取,所以最终使用的都是* read方法一次读一个的发法* 缓冲区 ...
- 解决 java BufferedReader.readLine()方法按行读取文件内容中文乱码的问题
原来的代码如下所示,但是输出的内容都是乱码 public void readLine(String path) {InputStreamReader isr = null;BufferedReader ...
- 浅谈BufferedReader中的read()方法和readLine()方法
浅谈BufferedReader中的read方法和readLine方法 前言:本人比较菜啦,如果有错误,还请大佬指正. 1. read方法 查看API文档我们可以发现BufferedReader类中的 ...
最新文章
- android检测内存使用工具--procrank
- 使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践--转载
- FreeBSD设置IP地址,网关,DNS
- 笔记本中美化代码的方法
- javascript中parseFloat(x)、parseInt(num,radix)、Promise、ReferenceError、Reflect、get和set
- 20135337——Linux内核分析:第十七章 模块与设备
- linux下配置mysql默认编码utf8
- C语言--(四)常用运算符
- 07. Declare destructors virtual in polymorphic base classes
- python编写音乐标签_如何用PYTHON代码写出音乐
- node2vec文献出处_图表示学习入门2——Node2Vec
- K8s部署Nexus3管理Docker镜像
- 最速梯度下降法及matlab实践,最速下降法以及代码实现
- 罗马数字转换python_阿拉伯数字转换成罗马数字
- html制作钢铁侠心脏,钢铁侠胸部的“心脏”并非特效,那是怎么放进身体的?...
- 摸鱼儿·雁丘词 / 迈陂塘
- python进行谱曲_python创作音乐_ 计算机创作,计算音乐
- PCI8524 并行8Ch24Bits100Ksps高精度数据采集卡
- 计算机颜色偏蓝,电脑整个屏幕颜色不正常偏蓝怎么调回正常颜色?
- C | C++定义全局变量的方法