Java浅谈BufferedReader
既然Scanner简单好用,为什么要用BufferedReader呢?
主要原因是面对大量的读入显得较慢且不安全,这里体现在三个方面,一方面是解析的问题,好用意味着封装的更复杂,一拖n的接口解析起来会慢;另一方面是缓冲区的问题,Scanner缓冲区小1024B,直面物理介质的机会更大,众所周知,IO时间在大数据面前总是拖后腿的。而BufferedReader是面对字符流的输入,虽然面对二进制等形式充满困扰,但是文本文件还是主流形式,自然他也是读入的强力工具,处理对象单一使得他的底层操作更简单,效率更高,并且拥有一个8192B的缓冲区域,缓冲区域更大;最后一个方面是关于同步的问题,BufferedReader的read函数添加了synchronized同步关键字,每次读入程序只能由一个线程执行,不会出现并发读入导致的错误,例如:同一个缓冲区域中,A和B都要读取同一行内容,A读取走了B读取的不完整,或者A持续拥有缓冲区的权限导致B读取的内容不正确等等问题。
BufferedReader如何构造以及使用?
BufferedReader br = new BufferedReader(Reader in);
BufferedReader采用的是装饰者模式,主要是为其他读取流增加额外的功能,比如缓冲区,更简单高效的读取操作等;被装饰者则是Reader抽象类的具体实现类,比如InputStreamReader、FileReader等;这里给出一个从控制台读入的代码段:
int n;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
Tips:主要是用来处理字符串文本,想要处理数字等常见形式可以基于Integer等形式自带的格式转换。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器