zoukankan      html  css  js  c++  java
  • 5.22Java转换流(将字节流转成字符流)

    5.22Java转换流(将字节流转成字符流)

    字节流转字符流图片

    很多系统或者框架的底层返回的都是字节流,但是为了处理可能要进行转换成字符流,所以提供了这个转换方法

    举例

    System.in、System.out都是字节流输入、输出

    InputStreamReader

    将字节转成字符--->解码--->decode

    作用
    • InputStreamReader--->字节流转成字符流,处理纯文本内容

    • 字节转成字符--->解码--->字符集--->指定字符集

    OutputStreamWriter

    将写入的字符转换成字节--->编码--->encode

    这两个流的特点:在构造器可以指定字符集

    InputStreamReader:--->字节数不够或者字符集不对都可能出现乱码

    package iostudy.convert;

    import jdk.internal.util.xml.impl.Input;

    import java.io.*;
    import java.net.URL;

    /**
    * 转换流:InputStreamReader、OutputStreamWriter
    * 作用:
    * 1、以字符流的形式操作字节流(纯文本的形式)
    * 2、指定字符集--->构造器自带了
    */
    public class ConvertTestNo2 {
       public static void main(String[] args) {
           /*创建源*/
           File src = new File("D:/workspace/abc.txt");
           Writer writer = null;
           //操作System.in和System.out--->System.in输入的都是字符可以对其转换
           //操作网络流 下载百度源代码--->网络爬虫第一步(先拿到源代码、进行分析、清晰、在进行处理--->存储)
           //打开一个网络节点流、字节流--->因为是字节流,所以可以用字节流装饰符加速处理--->openStream为打开一个网络流节点
           try (InputStream is = new URL("http://www.baidu.com").openStream()){
               //创建FileWriter对象
               writer = new FileWriter(src);
               //进行操作
               int temp;
               while ((temp=is.read())!=-1){
                   writer.write((char)temp); //这里面可能会出现乱码现象--->使用InputStreamReader类实例化对象
              }
               /*强制刷新流*/
               writer.flush();
          }catch (IOException e){
               System.out.println("操作异常!!!");
          }finally {
               try {
                   if (null!=writer){
                       writer.close();
                  }
              }catch (IOException e){
                   e.printStackTrace();
              }
          }
           testNo1();
      }

       public static void testNo1(){
           /*创建源*/
           File src = new File("D:/workspace/abc.txt");
           Writer writer = null;
           //操作System.in和System.out--->System.in输入的都是字符可以对其转换
           //操作网络流 下载百度源代码--->网络爬虫第一步(先拿到源代码、进行分析、清晰、在进行处理--->存储)
           //打开一个网络节点流、字节流--->因为是字节流,所以可以用字节流装饰符加速处理--->openStream为打开一个网络流节点--->InputStreamReader获取网页源代码转成UTF-8的形式
           try (InputStreamReader is = new InputStreamReader(new URL("http://www.baidu.com").openStream(), "UTF-8")){
               //使用装饰流加速节点流
               //创建FileWriter对象
               writer = new FileWriter(src);
               //进行操作
               int temp;
               while ((temp=is.read())!=-1){
                   writer.write((char)temp); //这里面可能会出现乱码现象--->使用InputStreamReader类实例化对象
              }
               /*强制刷新流*/
               writer.flush();
          }catch (IOException e){
               System.out.println("操作异常!!!");
          }finally {
               try {
                   if (null!=writer){
                       writer.close();
                  }
              }catch (IOException e){
                   e.printStackTrace();
              }
          }
      }

       public void testNo2(){
           /*创建源*/
           File src = new File("D:/workspace/abc.txt");
           Writer writer = null;
           //操作System.in和System.out--->System.in输入的都是字符可以对其转换
           //操作网络流 下载百度源代码--->网络爬虫第一步(先拿到源代码、进行分析、清晰、在进行处理--->存储)
           //打开一个网络节点流、字节流--->因为是字节流,所以可以用字节流装饰符加速处理--->openStream为打开一个网络流节点--->InputStreamReader获取网页源代码转成UTF-8的形式
           try (BufferedReader is = new BufferedReader
                  (new InputStreamReader
                          (new URL("http://www.baidu.com").openStream(), "UTF-8"))){
               /*
               1、new URL是一个节点流,里面放入网址+运行openStream方法既可以打开一个网络流
               2、拉下来以后发现全是字符,使用InputStreamReader转成字节流,需要指定字符集可以避免乱码--->InputStreamReader可以指定读取内容的字符集
               3、在使用BufferedReader装饰流加速节点流处理
               4、除了节点流其他都是装饰流
               --->以上三步只是拿下页面资源。不是所有网站都支持拉取页面源代码
                */
               //使用装饰流加速节点流
               //创建字符串
               String str;
               while ((str=is.readLine())!=null){
                   writer.write(str); //这里面可能会出现乱码现象--->使用InputStreamReader类实例化对象
              }
               /*强制刷新流*/
               writer.flush();
          }catch (IOException e){
               System.out.println("操作异常!!!");
          }finally {
               try {
                   if (null!=writer){
                       writer.close();
                  }
              }catch (IOException e){
                   e.printStackTrace();
              }
          }
      }
    }

    OutputStreamWriter:

            BufferedWriter writer1 = new BufferedWriter(
                   new OutputStreamWriter(
                           new FileOutputStream("Baidu.html"),"UTF-8"
                  )
               //加入到try...with...source当中

     

     

    It's a lonely road!!!
  • 相关阅读:
    【转】Android Activity类应用技巧分享
    【转】LinearLayout:
    正则表达式语法
    【转】cocos2dx 详细配置!(一款C++编写的多平台2D游戏开源框架)
    子网掩码与子网的划分
    防黑阻击入侵检测之蜜罐与蜜网
    手机停机照样免费上网(无限量)
    【转】QQ邮箱挂吗让你肉鸡满天飞【提醒】
    【转】记事本也能杀毒,处理顽固程序
    [转载]虚拟的东西也会枯竭——全球IPv4地址明年初将用完
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14811923.html
Copyright © 2011-2022 走看看