转换流(可以指定编码表)
·
InputStreamReader和OutputStreamWriter 是属于字符流read和write体系子类
reader
|----InputStreamReader 读取转换流
writer
|----OutputStreamWriter 写入转换流
InputStreamReader 读取转换流
需求:使用System.in读取一行字节流转换为字符串
//System.out 对应的是标准输出设备,控制台(操作字节流数据)
//System.in 对应的标准输入设备:键盘(操作字节流数据)
当字节流需要用到字符流的体系方法 需要使用转换流InputStreamReader
//获取键盘录入对象
InputStream in =System.in;
//将键盘录入字节流对象转换为字符流对象,使用转换流InputStreamReader
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作,使用BufferedReader
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null){
if("over".equals(line)){break; }
System.out.println(line);
}
bufr.close();
常见的键盘录入写法
改变标准的输入输出设备
//System.out 对应的是标准输出设备(目的),默认控制台(操作字节流数据)
//System.in 对应的标准输入设备(源):默认键盘(操作字节流数据)
注意System.out和System.in是可以通过System.setOut()方法和System.setIn()方法修改默认的标准输入输出设备(也就是说源和目的都可以改变)
public static void readered() throws IOException {
//【1】使用System.setIn() 重新配置标准输入设备(源),将键盘设备修改为硬盘设备(文件数据存储在硬盘)
System.setIn(new FileInputStream( "hhh.txt"));
//【2】创建读取转换流InputStreamReader的对象转换已修改的输入设备(读取源)
InputStreamReader isr=new InputStreamReader(System.in,"GBK");
BufferedReader bufr=new BufferedReader(isr);
//【1】使用System.setOut() 重新配置标准输出设备(目的),将控制台设备修改为硬盘设备(文件数据存储在硬盘)
System.setOut(new PrintStream( "dddd.txt"));
//【2】创建读取转换流OutputStreamWriter的对象转换已修改的输入设备(目的)
OutputStreamWriter osw=new OutputStreamWriter(System.out,"GBK");
//为提高效率使用创建输出缓冲区的对象进行读取已转换的字符流数据
BufferedWriter bufw=new BufferedWriter(osw);
String line=null;
while((line=bufr.readLine())!=null) {
bufw.write(line);//写入读取的每行数据
bufw.newLine();//换行
bufw.flush();//刷新数据
}
bufr.close();//关闭资源
bufw.close();
}
-------------------------------------------------------------------------------
转换流-指定编码表存储
【1】字符流的体系的读取输出类一般都是使用默认的编码表(GBK),而只有转换流可以指定编码表读取或输出
【2】转换流是字符和字节之间的桥梁,通常涉及到字符编码转换时需要使用转换流
【1】InputStreamWriter 【2】OutputStreamWriter
使用读取转换流指定编码读取
public static void readered() throws IOException {
//【1】创建FileInputStream对象以字节流形式读取文件
FileInputStream fs= new FileInputStream("hhh.txt");
//【2】创建读取转换流的对象按指定的编码格式将字节流数据转换为字符流数据
InputStreamReader isr=new InputStreamReader(fs,"GBK");
//【3】为提高读取效率使用创建读取缓冲区的对象进行读取已转换的字符流数据
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null){
System.out.println(line);
}
bufr.close();
}
结果:
-------------------------------------------------------------------
通过字符流直接读取文件