JAVA---转换流

目录

转换流什么时候使用?

键盘的录入

转换流的出现:

流操作的基本规律:

示例:


转换流什么时候使用?

涉及到字符编码转换时,需要用到转换流

键盘的录入

读取键盘录入
System.out:对应的是标准输出设备:控制台
System.in:对应的标准输入设备

需求:
当录入一行数据后,就将该行数据进行打印,
如果录入的数据是over,那么停止录入

import java.io.*;
class ReadIn
{
    public static void main(String[] args) throws IOException
    {
        InputStream in = System.in;
        //敲一个存一个,等你敲回车在一块打印出来
        StringBuilder sb = new StringBuilder();
        while(true)
        {
            int ch = in.read();
            if(ch ='/r')
                continue;
            if(ch ='/n')
            {
                String s= sb.toString();
                if("over".equals(s))
                    break;
                //将用户输入的结果返回大写
                System.out.println(s.toUpperCase())
                sb.delete(0,sb.length());
            }
            else
                sb.append((char)ch);

        }
        
    
    }
}

通过刚才的键盘录入一行数据并打印其大写,发现其实就是读一行数据的原理,也就是readLine方法

能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?

readLine方法是字符流BufferedReader类中的方法,而键盘录入的read方法是字节流InputStream的方法

那么能不能将字节流转成字符流在使用字符流缓冲区中的readLine方法呢?

用类InputStreamReader(Reader的子类):是字节流通向字符流的桥梁

转换流的出现:

//获取键盘录入对象
class TransStreamDemo
{
    public static void main(String[] args)throws IOException
    {
        //获取键盘录入对象
        InputStream in =System.in;

        //将字节流对象转成字符流对象,使用转换流
        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.toUpperCase());
        }
        
        bufr.close();
    }

}
//获取键盘写入对象
class TransStreamDemo
{
    public static void main(String[] args)throws IOException
    {
        //获取键盘录入对象
        InputStream in =System.in;
        //将字节流对象转成字符流对象,使用转换流
        InputStreamReader isr = new InputStreamReader (in);
        //为了提高效率,将字符串进行缓冲区技术高效操作,使用BufferedReader
        BufferedReader bufr = new BufferedReader(isr);

        //以上可以何合为一行代码,这时键盘最常见的写法
        //BufferedReader bufr = new BufferedReader(new InputStreamReader (System.in));
        
        //获取键盘写入对象
        OutputStream out = System.out;
        OutputStreamWriter osw = new OutputStreamWriter(out);
        BufferWriter bufw = new BufferdWriter(osw);
        
        

        String line = null;

        while((line=bufr.readLine())!=null)
        {
            if("over".equals(line));
                break;
            bufw.write(line.toUpperCase());
            //换行
            bufw.newLine();
            //刷新到控制台
            bufw.flush();
            
        }
        
        bufr.close();
    }

}

 

流操作的基本规律:

通过三个明确来完成

1.明确源和目的

  • 源:输出流:InputStream、Reader
  • 目的:输出流:OutputStream、Writer

2.操作的数据是否是纯文本

  • 是:字符流
  • 不是:字节流

3.当体系明确后,在明确要使用哪个具体的对象

  • 通过设备来进行区分
  • 源设备:内存,硬盘,键盘
  • 目的设备:内存,硬盘,控制台

示例:

需求:将键盘录入的数据保存到一个文件中

源:InputStream、Reader

是不是纯文本?是 Reader

设备:键盘,对应的对象是System.in

为了操作键盘的文本数据方便,转成字符流按照字符串操作是最方便的,所以既然明确了Reader,那么就将System.in转换成Reder,用到了Reader体系中转换流,InputStreamReader

InputStreamReader isr = new InputStreamReader(System.in);

需要提高效率么?需要,BufferedReader

BufferedReader bufr = new BufferedReader(isr);

 

目的:OutputStream、Write

是否是纯文本?是,Writer

设备:硬盘,一个文件,使用FileWriter

FileWriter fw = new FileWriter("c.txt");

需要提高效率么?需要

BufferedWriter bufw = new BufferedWriter (fw);

扩展:

想要把录入的数据按照指定的编码表(utf-8),将数据存到文件中

OutputStreamReader osw = new OutputStreamReader(new FileOutputStream("d.txt"),"UTF-8");

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值