黑马程序员技术交流社区

标题: IO流--转换流 [打印本页]

作者: 洛奇亚    时间: 2015-9-22 22:16
标题: IO流--转换流
转换流:

1、字节流转化成字符流的桥梁。转换流。

InputStreamReader :字节到字符的桥梁。解码
OutputStreamWriter :字符到字节的桥梁。 编码

流的操作规律:
   之所以要弄清楚这个规律从,是因为流对象太多,开发时不知道用哪个对象合适。

   想要知道开发时用到哪些对象,只要通过四个明确即可:
    1,明确源和目的(汇)
                       源:InputStream     Reader
                       目的:OutputStream   Writer              

    2,  明确数据是否是纯文本数据。

                     源: 如果是纯文本: Reader
                                                 否:InputStream
                     目的:是纯文本:Writer
                                                 否:OutputStream  

    3,明确具体的设备。
                源设备:
                                 硬盘:File
                                 键盘:System.in                              
                                 内存 :数组
                                  网络:Socket流   
                 目的设备:
                                硬盘:File
                               控制台:System.out
                                内存:数组
                                网络:Socket流                                      

    4,是否需要其他额外功能
                 (1),是否需要高效(缓冲区);
                                  是,就加上buffer

2、字节流转化成字符流的桥梁。转换流。

package cn.itcast.io.p1.inputstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class TransStreamDemo {
        public static void main(String[] args) throws IOException {
               
//        Scanner input=new Scanner(System.in);
//               
             System.out.println("请输入:");
//               
//                String temp=input.next();
//               
//                System.out.println(temp);
                // 字节流
                InputStream in = System.in;
                /*int ch=in.read();
                System.out.println(ch);*/
               
                // 字节流转化成字符流的桥梁。转换流。
                InputStreamReader isr = new InputStreamReader(in);
                int ch=isr.read();
               
                System.out.println((char)ch);
               
                // 字符流
                BufferedReader bufr = new BufferedReader(isr);
               
                OutputStream out =System.out;
               
                OutputStreamWriter osw = new OutputStreamWriter(out);
               
                BufferedWriter bufw =new BufferedWriter(osw);
               
                String line = null;
                while ((line = bufr.readLine()) != null) {
                        if ("over".equals(line)) {
                                break;
                        }
        //                System.out.println(line.toUpperCase());
                       
                        /*osw.write(line.toUpperCase()+"\r\n");
                        osw.flush();*/
                       
                        bufw.write(line.toUpperCase());
                       
                        bufw.newLine();
                       
                        bufw.flush();
                       
                }
        }
}

3、    * 1,需求: 将键盘录入的数据写入到一个文件中。
         * 2,需求:将一个文本文件内容显示在控制台。
         * 3,需求:将一个文件中的内容复制到另一个文件中。
package cn.itcast.io.p1.inputstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import javax.imageio.stream.FileImageInputStream;
public class TransStreamDemo3 {
       
        public static void main(String[] args) throws IOException {
               
                /**
                 * 1,需求: 将键盘录入的数据写入到一个文件中。
                 * 2,需求:将一个文本文件内容显示在控制台。
                 * 3,需求:将一个文件中的内容复制到另一个文件中。
                 */
               
                //需求2:
                BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
               
                //BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(System.out));
               
               
                //需求1:
            BufferedWriter bufw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));
               
                String line =null;
               
                System.out.println("请输入:");
               
                while((line=bufr.readLine())!=null){
                       
                        if("over".equals(line)){
                                break;
                        }
                       
                        bufw.write(line.toUpperCase());//转换成大写
                        bufw.newLine();
                        bufw.flush();
                }
               
               
        }
}


4、需求中明确了指定编码表,就不可以使用FileWriter,因为fileWriter内部是使用默认的本地编码表。
只能使用其父类。OutputStreamWriter。
package cn.itcast.io.p1.inputstream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TransStreamDemo4 {
       
        public static void main(String[] args) throws IOException {
               
                writeText_2();
        }
        public static void writeText_2() throws IOException {
               
                OutputStreamWriter osw= new OutputStreamWriter(new FileOutputStream("gbk_2.txt"),"gbk");
               
                osw.write("你好");
               
                osw.close();
               
        }
        /**
         * @throws IOException
         */
        public static void writeText_1() throws IOException {
               
                FileWriter fr=new FileWriter("gbk_1.txt");
               
                fr.write("年后");
               
                fr.close();
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2