io字符流和字节流之间的转换和基本应用练习

流的操作规律,及其总结;

基本:
InputStream OutputStream:对于字节流分别进行输入输出操作
Reader Writer:对于字符流分别进行输入输出操作

转换流:
InputStreamReader:字节到字符的转换,解码
OutputStreamWriter:字符到字节的桥梁,编码

缓冲流:
BufferReader name=new BufferReader("file1.txt");
BufferWriter name=new BufferWriter("file2.txt");


想知道开发时用到那个对象,只需通过四个明确

1.明确源(来源)和目的(汇入)
     源:InputStream Reader
     目的:OutputStream Writer
     
2.明确数据是否是纯文本(字符流)数据
    源: 是纯文本:Reader
        否:InputStream
    目的:是纯文本:Writer
           否:OutputStream
3.明确具体的设备
    源设备:
        硬盘:用File
        键盘:System.in
        内存:数组
        网络:socket流
    目的设备:
        硬盘:用File
        键盘:System.out
        内存:数组
        网络:socket流
4.是否需要其他功能
     1.是否需要高效(缓冲区)
         是:添加Buffer
        
============================================
开发需求1:复制一个文本文件
    文本文件:Reader Writer
    源:硬盘
    目的:硬盘
    FileReader a=new FileReader("file1.text");
    FileWriter b=new FileWriter("file2.text");
    读写:
        1    不添加缓冲区(一个一个读写,效率极低)
            int dex=0;
            while((dex=a.read())!=-1)
            {
                b.write(dex);
            }
            a.close();
            b.close();
        2   添加缓冲区(自创数组缓冲区)//a.read(char arr[]);
            char arr[]=new char[1024];
            int len=0;
            while((len=a.read(arr))!=-1)
            {
                b.write(arr,0,len);
                b.flush();
            }
            a.close();
            b.close();
        3   用自带的缓冲区方法Buffer
            BufferReader bf1=new BufferRander(a);
            BufferWriter bf2=new BufferWriter(b);    
            String s=null;
            while((s=bf1.read())!=null)
            {
                bf2.write(s);
                bf2.flush();
            }
            bf1.close();
            bf2.close();
========================================
开发需求2:读取键盘录入的信息,并写入一个文件中
         
         源:字节 InputStream 键盘 
         目的:硬盘 File
         InputStream re=System.in;//键盘输入字节
         
         InputStreamReader we=InputStreamReader(re);//字节转换为字符
         FileWriter rw=new FileWriter("file.txt");
         
         想高效
         BufferReader bf1= new BufferReader(we);
         BufferWriter bf2= new BufferWriter(rw);
         
         读写:略
 ==================================
开发需求3: 将一个文本文件显示在控制台上
        源:
            硬盘:File
        目的:
            控制台:System.out
        
        FileReader fe=new FileReader("file.txt");
        OutputStreamWriter re=new OutputStreamWriter(System.out);
        
        BufferReader= new BufferReader(fe);
         BufferWriter= new BufferWriter(re);
         读写:略

===================================
开发需求4: 键盘录入数据展示在控制台上
            源:键盘:System.in
            目的:控制台:System.out
            
            InputStream re=System.in;
            OutputStream de=System.out;
            
            明确额外功能:需要转换因为都是字节流
            但是操作文本数据,所以用字符流操作起来更方便
            InputStreamReader we=InputStreamReader(re);
              OutputStreamWriter re=new OutputStreamWriter(de);
      读写:略

================================
    开发需求5:把一个指定中文字符串以指定编码表写入到一个文件中:列如“你好”
        FileReader 中是以本机默认的编码码表来操作,要以指定的编码码表得用 转换流
        指定utf-8为编码表从字节流中取出file.txt,在用转换流转换成字符流
        OutputStreamWriter re=new OutputStreamWriter(new FileOutputStream("file.txt"),"gbk");
        re.writer("你好");
            存是存进去了,取,也必须用指定码表来取
        InputStreamReader ew=new `InputStreamReader(new FileInputStream("file.txt"),"gbk");   
        char arr[]=new char[10];
        int len=ew.read(arr); 
        String s=new String(arr,0,len);
    
    

猜你喜欢

转载自blog.csdn.net/lioncatch/article/details/81450841