• 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!!!
  • 相关阅读:
    小白的springboot之路(三)、集成mybatis与MySQL
    小白的springboot之路(四)、mybatis-generator自动生成mapper和model、dao
    springboot打印SQL及多环境配置
    小白的springboot之路(二)、集成swagger
    小白的springboot之路(一)、环境搭建、第一个实例
    npm切换成淘宝镜像源
    无废话设计模式(0)--设计模式的六大原则
    java之--加密、解密算法
    【Java】Java中的final关键字和static
    Add an Action that Displays a Pop-up Window 添加显示弹出窗口按钮
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14811923.html
Copyright © 2020-2023  润新知