java学习笔记:关于IO转换流InputStreamReader和OutputStreamWriter

1 字节流

InputStream                   ->FileInputStream
OutputStream                ->FileOutputStream


2 字符流
Reader -> BufferedReader     -> LineNumberReader 
       -> InputStreamReader  -> FileReader

Writer -> BufferedWriter
       -> OutputStreamWriter -> FileWriter

============================================================
由JDK的IO流继承结构我们看到
FileInputStream和FileOutputStream是直接继承自字节流基类的

而FileReader和FileWriter是继承自2个转换流,

为什么会这样呢?

很可能是因为FileReader和FileWriter都是对字符型文件的操作,

而计算机处理的是字节数据,

读取文件后要将字符对象转成字节对象,

在写入到文件时时要将字节对象转成字符对象


/*
[示例]:按行读写控制台中的字符
*/
import java.io.*;
class Demo            
{
  public static void main(String[] args)  throws IOException
  {
    readAndWriteCmd();
  }
 
  public static void readAndWriteCmd() throws IOException
  {
    //1.获取键盘输入的字节流对象
    InputStream in = System.in;
    
    //2.将字节流对象转成字符流对象,使用转换流InputStreamReader
    InputStreamReader isr = new InputStreamReader(in);  //in字节流就变成isr字符流了
    
    //3.为了提高效率,使用字符缓冲流BufferedReader
    BufferedReader bufr = new BufferedReader(isr);
    
    OutputStream output = System.out;  
    OutputStreamWriter osw = new OutputStreamWriter(output);  
    BufferedWriter bufw= new BufferedWriter(osw);  //因为要用到换行newLine()
    
    //4.然后就可以使用BufferedReader的readLine方法一次读取一行,读了再写到cmd里
    String lineStr=null;
    while(true)
    {
      lineStr = bufr.readLine();    //读取我们从键盘输入到控制台的内容
      if(lineStr!=null)
      {
        if(lineStr.equals("over"))   //输入over时结束
        {
          break;
        }
        else
        {
          bufw.write(lineStr); //写到控制台
            bufw.newLine();      //输出换行符,在windows里也可直接输出"\r\n"
          bufw.flush();        //清空缓冲区,否则下一次输出时会重复输出  
        }      
      }
      else
      {
        break;
      }
    }
    
    
  }
  
}















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值