既然Scanner简单好用,为什么要用BufferedReader呢?

主要原因是面对大量的读入显得较慢且不安全,这里体现在三个方面,一方面是解析的问题,好用意味着封装的更复杂,一拖n的接口解析起来会慢;另一方面是缓冲区的问题,Scanner缓冲区小1024KB,直面物理介质的机会更大,众所周知,IO时间在大数据面前总是拖后腿的。而BufferedReader是面对字符流的输入,虽然面对二进制等形式充满困扰,但是文本文件还是主流形式,自然他也是读入的强力工具,处理对象单一使得他的底层操作更简单,效率更高,并且拥有一个8192KB的缓冲区域,缓冲区域更大;最后一个方面是关于同步的问题,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等形式自带的格式转换。

Java浅谈BufferedReader的更多相关文章

  1. java 浅谈web系统当中的cookie和session会话机制

    一 Cookie: 1. Cookie翻译为小甜饼,有一种特殊的味道.cookie主要用来在(浏览器)客户端做记号用的.Cookie不属于java,Cookie是一种通用的机制,属于HTTP协议的一部 ...

  2. [Android&Java]浅谈设计模式-代码篇:观察者模式Observer

    观察者,就如同一个人,对非常多东西都感兴趣,就好像音乐.电子产品.Game.股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们.在代码中.我们也有这种一种方式来设计一些好玩的思想来.今天就写个 ...

  3. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  4. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  5. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  6. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  7. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  8. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

  9. 浅谈java性能分析

    浅谈java性能分析,效能分析 在老师强烈的要求下做了效能分析,对上次写过的词频统计的程序进行分析以及改进. 对于效能分析:我个人很浅显的认为就是程序的运行效率,代码的执行效率等等. java做性能测 ...

  10. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

随机推荐

  1. 2D+1D | vivo官网Web 3D应用开发与实战

    一. 前言 1.1 前端工程师,不写网页,还能做什么? 在近20年的前端发展史中,前端经历了铁器时代(小前端),信息时代(大前端)以至现在的全能前端时代.经历了几个时代的沉淀之后,前端领域开始更加细分 ...

  2. springboot 实现接收前端发来的图片和视频以及在页面上展示图片和视频

    springboot 实现接收前端发来的图片和视频以及在页面上展示图片和视频 一.效果: 1.上传图片 2.显示上传的图片 3.上传的视频 4.显示上传的视频 二.代码 没依赖特殊的包,引入sprin ...

  3. P5730

    这道题莫名其妙的在本地能过可是洛谷上却0分,把WA的点下载下来之后发现我输出的和他要输出的明明一模一样,说明洛谷的评测有一些问题.我把getchar输入换成cin输入后就AC了,说明洛谷对getcha ...

  4. C# 绘制面形图

    图形要素:4个点.颜色.作图对象.数据 Graphics g;//创建Graphics对象 private void button1_Click(object sender, EventArgs e) ...

  5. 分享 ASCII 字符集的字模

    是做 VGA 显示屏时用到的,这是字模资源:gitee 链接 以下为字模代码: // 133 * 16 * 8 字模的 parameter reg [127:0] C_ascii_character ...

  6. java 服务 JVM 参数设置配置

    本文为博主原创,转载请注明出处: 常用JVM 配置参数: -Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小. -Xms:表示java虚拟机堆区内存初始内存分配 ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (183)-- 算法导论13.4 7题

    七.用go语言,假设用 RB-INSERT 将一个结点 x 插入一棵红黑树,紧接着又用 RB-DELETE 将它从树中删除.结果的红黑树与初始的红黑树是否一样?证明你的答案. 文心一言: 首先,我们需 ...

  8. 6. 配置项:relabel_config

    6.1relabel_config的位置 6.2 relabel_config参数详解 1.replace 2. keep 3.drop 6.labelkeep 7.hashmod 6.3 正则表达式 ...

  9. Oracle数据库如何解决创建用户名开头必须要C##问题?

    1.问题 我们在创建用户,概要文件等时,由于使用的是容器数据库,其文件名必须以C##开头. 我们在学习过程中暂时不需要对齐进行区分,所以如何修改这个设定呢? 2.解决 参考链接如何解决创建用户名开头必 ...

  10. 260. 只出现一次的数字 III

    1.题目介绍 2.题解 2.1 快排+遍历 思路 同本系列前几题一样 代码 class Solution { public: std::vector<int> singleNumber(s ...