InputStreamReader和BufferedReader用法_bufferedreader 和 inputstreamreader-程序员宅基地

技术标签: InputStreamReader  BufferedReader  


一、BufferedReader类

. 所属类库:

         java.lang.Object  

              java.io.Reader  

                         java.io.BufferedReader

. 基本概念

           public class BufferedReader    extends Reader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值足够大。

通常, Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader (如 FileReader 和 InputStreamReader )。

BufferedReader 流能够读取文本行 , 通过向 BufferedReader 传递一个 Reader 对象 , 来创建一个 BufferedReader 对象 , 之所以这样做是因为 FileReader 没有提供读取文本行的功能 .

. Demo

通过 Bufferedreader 捕获所输入的语句 :

import java.io.*;
class BufferedReaderDemo{
	public static void main(String[] args)throws IOException { 
		BufferedReader bufferedReader =new BufferedReader(
				new InputStreamReader(System.in));
 
		System.out.print("请输入一系列文字,可包括空格:"); 
		String text =bufferedReader.readLine(); 
		System.out.println("请输入文字:"+text);
	} 
}
 
注解:

throws IOException   抛出异常

InputStreamReader 是字节流通向字符流的桥梁

二、InputStreamReader类

InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
构造方法
    InputStreamReader isr = new InputStreamReader(InputStream in);//构造一个默认编码集的InputStreamReader类
    InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//构造一个指定编码集的InputStreamReader类。
   
    参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。
    或者 InputStream in = new FileInputStream(String fileName);//读取文件中的数据。可以看出 FileInputStream 为InputStream的子类。
主要方法 :int read();//读取单个字符。
                 int read(char []cbuf);//将读取到的字符存到数组中。返回读取的字符数。

. Demo

import java.io.*;
class InputStreamReaderDemo {
	public static void transReadNoBuf() throws IOException {
		/**
		 * 没有缓冲区,只能使用read()方法。
		 */
		//读取字节流
		//InputStream in = System.in;//读取键盘的输入。
		InputStream in = new FileInputStream("D:\\demo.txt");//读取文件的数据。
		//将字节流向字符流的转换。要启用从字节到字符的有效转换,
		//可以提前从底层流读取更多的字节.
		InputStreamReader isr = new InputStreamReader(in);//读取
		//综合到一句。
		//InputStreamReader isr = new InputStreamReader(
		//new FileInputStream("D:\\demo.txt"));
			
		char []cha = new char[1024];
		int len = isr.read(cha);
		System.out.println(new String(cha,0,len));
		isr.close();

	}
	public static void transReadByBuf() throws IOException {
		/**
		 * 使用缓冲区 可以使用缓冲区对象的 read() 和  readLine()方法。
		 */
		//读取字节流
		//InputStream in = System.in;//读取键盘上的数据
		InputStream in = new FileInputStream("D:\\demo.txt");//读取文件上的数据。
		//将字节流向字符流的转换。
		InputStreamReader isr = new InputStreamReader(in);//读取
		//创建字符流缓冲区
		BufferedReader bufr = new BufferedReader(isr);//缓冲
		//BufferedReader bufr = new BufferedReader(
		//new InputStreamReader(new FileInputStream("D:\\demo.txt")));可以综合到一句。
	    /*int ch =0;
		ch = bufr.read();
		System.out.println((char)ch);
		*/
		String line;
		while((line = bufr.readLine())!=null){
			System.out.println(line);
		}
		isr.close();
	}
}

三、InputStreamReader、BufferedReader真实案例(非编码集)

import java.io.*;
class UtilResource {
	private void initializeResource() {
		try {

			//读取文件,并且以utf-8的形式写出去
			BufferedReader bufread;
			String read;
			bufread = new BufferedReader(new InputStreamReader(ResourceHelper
					.getResourceInputStream("pinyin.txt")));
			while ((read = bufread.readLine()) != null) {
				System.out.println(read);
			}
			bufread.close();
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

注:其中 pinyin.txt 放于项目的根目录下

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
class ResourceHelper {
	/**
	 * @param resourceName
	 * @return 
	 * @return 
	 */
	static BufferedInputStream getResourceInputStream(String resourceName) {
		try {
			return new BufferedInputStream(new FileInputStream(resourceName));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/M_0307/article/details/72778618

智能推荐

启动项目报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadT...-程序员宅基地

文章浏览阅读526次。昨天电脑关机的时候,没有停止项目,直接关闭了MyEclipse,今天来打开之后项目都报错,提示 信息如下2018-7-19 13:56:54 org.apache.catalina.core.AprLifecycleListener init信息: Loaded APR based Apache Tomcat Native library 1.1..._error creating bean with name 'loadtask' defined in servletcontext resource

websocket web聊天室的多页面跨面问题-程序员宅基地

文章浏览阅读1.4k次。为什么80%的码农都做不了架构师?>>> ..._web版聊天窗口如何跨浏览器

一种软件网络验证方式的实现 + 网络验证转本地验证的一种实现(附VC源码)...-程序员宅基地

文章浏览阅读5.6k次。目前很多软件都是通过网络验证来实现的,一种比较流行的方式便是把服务器端(如验证网页)放在服务器上,软件为客户端,当软件注册或启动时通过网络与服务器端进行数据交换,重新实现验证的目的。 个人觉得网络验证将是一种趋势,做得好的网络验证方式将是对软件的一种极大保护,如把软件的关键数据或关键代码放在服务器端,当认证通过后再发回到软件,且在传输过程中都用比较成熟的大型算法加密,从而达到一种防破解的..._网络验证转本地

笔记本出厂预装Win8改装Win7的操作步骤及常见问题-程序员宅基地

文章浏览阅读255次。故障现象:修改前的注意事项:若您确定要将您笔记本预装的Windows 8系统改装为Windows 7系统,请注意如下重要事项:1. 由于您笔记本预装的Windows 8系统需要使用BIOS中的UEFI功能及GPT分区表,所以在您将系统改装为Windows 7系统时,需要将随机Windows 8系统的所有分区全部删除(包括Windows 8引导分区、Windows 8系统修复分..._出厂win8换win7注意事项

(原)一次揪心的乱码排查过程-程序员宅基地

文章浏览阅读107次。序)很多时候其实问题很简单,问题在于自己懂得过于肤浅  项目中需要用到一个功能,机器人模拟和人类聊天,玩家说出一句话之后,机器人本能的和他开始聊天,这破B玩意儿我觉得只要有强大的词库和拆分算法,就那么点东西,但是要自己做还真是压力满满的。于是果断的在网上搜索,轻松的找到了这个东西:    这玩意儿给我的第一感觉就是实在,可以,完全能够满足需求,不过貌似它没有提供接口,这不是事儿,..._乱码 年 显示 骞

转】用Maven构建Hadoop项目-程序员宅基地

文章浏览阅读73次。  原博文出自于:  http://blog.fens.me/hadoop-maven-eclipse/      感谢! 用Maven构建Hadoop项目Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Ch...

随便推点

2007 合成孔径雷达成像算法与实现 各figure的matlab实现(第三章 - 图3.13 )_合成孔径雷达成像算法与实现 matlab-程序员宅基地

文章浏览阅读728次。说明:(1)本程序信号开始时间为-T/2,得到的结果与设置的时延t0是一致的,方式2和方式3都能够定位到同一个时刻(2)与书本的结果不同;所以书本应该添加或者减少一个线性相位;不过这些不要紧,只要理解时域匹配滤波器和频域匹配滤波器就行matlab程序代码如下:% initial matlab workspace% figure 3.13; page 63clcclearclose all%% 参数设置% LFM脉冲宽度T 和 调频斜率KT = 7.2e-6;K = 4.1e12;_合成孔径雷达成像算法与实现 matlab

php mysql 手册_(十二)php参考手册---MySQLi函数(php操作MySQL)(仅学习)-程序员宅基地

文章浏览阅读161次。一、php数据库操作1.连接到指定数据库header('Content-Type:text/html; charset=utf-8');// 第一步连接到数据库(@是不显示错误,一般调试时不加要@)$con= @mysql_connect('localhost','root','');//连接到指定的数据库mysql_select_db('db_name',$con)?>注意:(配置都正确的..._var_dump($ress);

【Axure原型图】—— 2. SHOW HIDDEN WIDGET(显示隐藏组件)-程序员宅基地

文章浏览阅读579次。在点击某个部件,让其或者另外一个部件隐藏或显示Step0: 下载练习文件在这里下载AxureTraining.rp文件,并用Axure RP打开Step1: SETUP练习文档中打开"Show hidden widget" 页面,选择“语音气泡”图标通过单击检查器中得“样式工具栏“或者“样式选择框”中得“隐藏”复选框,来隐藏该部件。Step2: ADD ONCLICK INT..._axure shown

Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理-程序员宅基地

文章浏览阅读683次。Toolbar作为ActionBar使用介绍本文介绍了在Android中将Toolbar作为ActionBar使用的方法.并且介绍了在Fragment和嵌套Fragment中使用Toolbar作为ActionBar使用时需要注意的事项.使用support library的ToolbarAndroid的ActionBar每个版本都会做一些改变, 所以原生的ActionBar在不同的系统上看..._android开发 fragment中使用toolbar

仿冒美团红包木马分析报告-程序员宅基地

文章浏览阅读147次。2015年05月18日 11:362705阿里移动安全实验室截获了一款仿冒美团应用的”美团红包”木马。用户安装木马后根据不同的参数,向服务器投递对应的数据,并上报用户敏感信息,包括:手机号,手机硬件及配置信息,用户的银行卡号,身份证号,姓名等各种敏感信息。美团应用安装量和使用频率非常高,而该仿冒木马应用迷惑性又极强,用户极其容易被诱骗安装受...

CVE-2021-4034:pkexec本地提权_phexec提权-程序员宅基地

文章浏览阅读3k次。影响范围Polkit Pkexec漏洞类型本地权限提升利用条件影响范围应用漏洞概述Polkit是一个应用程序级别的工具集,通过定义和审核权限规则,实现不同优先级进程间的通讯,控制决策集中在统一的框架之中,决定低优先级进程是否有权访问高优先级进程Polkit在系统层级进行权限控制,提供了一个低优先级进程和高优先级进程进行通讯的系统,它和sudo等程序不同,Polkit并没有赋予进程完全的root权限,而是通过一个集中的策略系统进行更精细的授权,这个漏洞是本地触发,只有在获得有限_phexec提权