黑马程序员------IO流之(读取与写入)转换流应用



 ------- <a href="http://www.itheima.com"target="blank">android培训</a>、<a href="http://www.itheima.com"target="blank">java培训</a>、期待与您交流! ----------

情形1

InputStreamReader是字节流通向字符流的桥梁,OutputStreamReader是字符流通向字节流的桥梁,InputStreamReader是Reader的子类,OutputStreamReaderWriter的子类故两个本身是都属于字符流,直接子类是FileReader和FileWriter.

举例:

功能需求:键盘录入一行数据并打印其大写。

分析:实现键盘录入一行数据最方便简捷的是readLine()方法,但其属于字符流缓冲区BufferedReader类中的,那么我们就可以使用InputStreamReader将字节流转换成字符流,再使用字符流缓冲区中的readLine()方法实现读取一行打印一行.

另外,打印过程也借助字符流缓冲区技术BufferedWriter提高效率,那么就用到OutputStreamWriter将要接收并打印的数据存入输出流缓冲区,调用其write()方法输出。

代码如下:

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//获取键盘 录入对象
//InputStream in =System.in;
//使用转换流,将字节流转换成字符流对象
//InputStreamReader isr = new InputStreamReader(in);
//将字符流对象传入缓冲区,提高效率
//BufferedReader bufr = new BufferedReader(isr);
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//读取键盘录入
//同理
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;//相当于一个中转站
while((line=bufr.readLine())!=null)//缓冲区中的数据一行行读取,一行行打印
{ if("over".equals(line))
break;
//System.out.println(line.toUpperCase());
  bufw.write(line.toUpperCase());
  bufw.newLine();//写入一个行分隔符,也就是下次从缓冲区读取一行并写入时换行  
  //bufw.flush();//务必!!写一行刷新一行,才能显示出来
}
bufr.close();
bufw.close();

}

情形2

 

举例:

功能需求:把录入数据按照指定的编码表(utf-8),将数据存到文件中。

分析:要存储到硬盘中的一个文件中,用FileWriter, FileWriter使用的是默认的编码表(GBK).但本需求是需要加入指定编码表utf-8,指定编码表只有转换流可以操作。

所以这里要使用的对象是写入转换流OutputStreamWriter。

如:OutputStreamWriter osw=new OutputStreamWriter(FileOutputStream(“a.txt”),”utf-8”);

(同理,读取指定编码表utf-8文件时,需要读取转换流InputStreamReaderosr=

new InputStreamReader (FileInputStream(“b.txt”),”utf-8”);)

 

总结:转换流是字符与字节之间的桥梁,通常涉及到字符编码转换时就需要用到转流。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值