IO-字节流与字符流

1、  流操作规律总结

    【分析步骤:】

        (1) 明确源与目的

              源:  输入流。 InputStreamReader

              目的: 输出流。 OutputStreamWriter.

        (2) 操作的数据是否是纯文本

              是: 字符流

              否: 字节流

        (3) 确定具体的对象

                原设备: 内存、硬盘、键盘

               目的设备: 内存、硬盘

        (4) 是否考虑效率问题

2、字节字符转换

    普通录入打印:

             

  InputStream in =  System.in() ;
                StringBuilder sb =newStringBuilder();
                    char chr=null;
                While(ture){
                         chr=in.read();   //是否可以换成readline()高效读取?后者只属于字符流
                         if ( chr==’\r’)
                                  continue;
                         if( chr==’\n’) {
                              String s = sb.toString();
                              System.out.println(s.toUppercase());
                                sb.delete(0,sb.length());
                                      break;}
                       //遇到特殊字符结束
                        if (“over”.equals(s))
                            break;
                        else
                           sb.append (chr);
                            } 

         

            字节转换成字符录入打印:

                 InputStreamin =  System.in() ;           //回车键表示一次输入结束。
                    //转换成字符流对象
                  InputStreamReader  inr = new InputStreamReader(in);  //键盘输入是字节流,可转成字符流。
             // 按字符流处理
        BufferedFileReader bfr = new BufferedFileReader(inr);
       /**
        BufferedFileReader bfr =
              newBufferedFileReader(new inputStreamWriter (System.in()));   */    
        String line =null;
           While ( line =bfr.readline()!=null){         //  readline()
            if(“over”.equals(line))
               break;
           System.out.println(line.toUpperCase());
       }
        inr.close().
           OutputStream out =System.out();
      OutputStreamWriter osw =
        BufferedFileWriter bfw = new BufferedFileWriter (osw);  //装饰System.out()方法;
    /**
        BufferedFileWriter bfw =
                   new BufferedFileWriter(newOutputStreamWriter (System.out()));
           */
      String line =null;
       While ( line =bfr.readline()!=null){      
          if(“over”.equals(line))
               break;
          bfw.write(line.toUppercase());
          bfw.newline();
             } 
         bfw.flush();
                bfr.close().

【改变输入输出设备】

        

      System.setIn(“Demo.java”);
      System.setOut(“pro.txt”);
   BufferedFileReader bfr =
                new BufferedFileReader(new inputStreamWriter(System.in()));
   BufferedFileWriter bfw =
                new BufferedFileWriter(newOutputStreamWriter (System.out()));
     String line =null;
    While ( line =bfr.readline()!=null){      
          if(“over”.equals(line))
                break;
         bfw.write(line.toUppercase());
         bfw.newline();
          } 
       bfw.flush();
       bfr.close().

3、字符编码

         【指定编码表】:转换流提供的定义功能。

         OutputStreamWriter(OutputStream out,String charsetName)

          BufferedReader bfr=

                            new BufferedWriter (new InputStreamWriter (new FileInputStream(2.mp3),”utf-8”));

          BufferedWriter bfw=

                            new BufferedWriter (new OutputStreamWriter (new FileOutputStream(2.mp3),”utf-8”));

                  默认编码表是GBK。   

          编码:字符串变字节数组

                   String ----> byte[]     str.getBytes(charseName);

         解码:字节数组变字符串

                   byte[]  --->   String

                   Stirng  str = String(byte[],charseName);      

        解决乱码问题:             

                               Stringstr=”你好”;

                              Bytes[] bt =  str.getBytes(“GBK”);

                             String string =  new Strng(bt,”iso8959_1”);

                               // 对乱码string进行处理

                               Bytes[] bt = string.getBytes(“iso8859_1”);

                               String string =  new Strng(bt,”GBK”);          

                 Utf-8--->GBk解码:

                          //  对于同时识别同一编码表的无法解决,仍然出现乱码

                           Bytes[]  bt = string.getBytes(“utf-8”);

                           String string =  new Strng(bt,”GBK”);

                          “联通”GBK 与UTF-8编码冲突,UTF-8包容各种编码表,其中,不同编码表由该字节的头数字标识。

                          联通------utf(open)------>��ͨ

                          你联通------utf(open)------->��ͨ



      


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值