zoukankan      html  css  js  c++  java
  • 第40节:Java中的IO知识案例

    标题图

    流是一连流串的字符,是信息的通道,分输出流和输入流。

    IO的分类

    第一种分:输入流和输出流。
    第二种分:字节流和字符流。
    第三种分:节点流和处理流。

    Java中流的分类:
    流的运动方向,可分为输入流和输出流两种。

    流的数据类型,可以分为字节流和字符流。

    输入流类都是抽象类InputStream(字节输入流)或抽象类Reader类(字符输入流)的子类。

    输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer类(字符输出流)的子类。

    输入流从文件输入为读取,输出流从文件输出为写入数据。

    字节输入流InputStrem和子节输出流OutputStream

    InputStream:FileInputStream,ObjectInputStream,ByteArrayInputStream,StringBufferInputStream,BufferedInputStream,DataInputStream

    OutputStream:FileOutputStream,ObjectOutputStream,ByteArrayOutputStream,BufferedOutputStream,DataOutputStream

    输入流
    输入流用于读取数据,用户可以从输入流中读取数据,但不能写入数据。

    输入流读取数据过程如下:
    (1)打开一个流。
    如:FileInputStream inputFile=new FileInputStream("数据源");
    (2)从信息源读取信息。
    如:inputFile.read();
    (3)关闭流。
    如:inputFile.close();

    输出流
    输出流用于写入数据。只能写,不能读。

    写数据到输出流过程如下:
    (1)打开一个流。
    如:FileOutputStream outFile=new FileOutputStream("数据源");
    (2)写入信息到目的地。
    如:outFile.write(inputFile.read()):
    (3)关闭流。
    如:outFile.close();

    字符流ReaderWriter

    字节字符转换流:
    InputStreamReader
    OutputStreamWriter

    加入缓冲流可以加快输入和输出的速度。

    FileInputStream fis = new FileInputStream("from.txt");
    InputStreamReader isr = new InputStreamReader(fis);
    // 可以加快输入和输出的速度
    BufferedReader br = new BufferedReader(isr);
    FileInputStream fis = new FileInputStream("from.txt");
    InputStreamReader isr = new InputStreamReader(fis);
    // 可以加快输入和输出的速度
    BufferedReader br = new BufferedReader(isr);
    
    FileOutputStream fos = new FileOutputStream("from.txt");
    OutputStreamWriter osw = new OutputStreamWriter(fos);
    // 可以加快输入和输出的速度
    BufferedWriter bw = new BufferedWriter(osw);
    import java.io.*;
    class Test{
     public static void main(String[] args){
      // 声明输入流
      FileInputStream fis = null;
      // 声明输出流
      FileOutputStream fos = nulll;
      try{
       // 生成输入流对象
       fis = new FileInputStream("e:/from.txt");
       // 生成输出流的对象
       fos = new FileOutputStream("e:/to.txt");
      // 生成字节数组
       byte[] buffer = new byte[1024];
     while(true){
     // 调用输入流对象的read方法
      int temp = fis.read(buffer,0,buffer.length);
      if(temp == -1){
       break;
      }
      fos.write(buffer,0,temp);
     }
      }catch(Exception e){
       System.out.println(e);
     }finally{
      try{
      fis.close();
      fos.close();
      }catch(Exception e){
       System.out.println(e);
      }
     }
    }
    }

    字节输入流和字节输出流

    Reader FileReader
    Writer FileWriter
    int read(char[] c, int off, int len)
    void write(char[] c, int off, int len)
    import java.io.*;
    public class Demo{
     public static void main(String args[]){
      FileReader fr = null; // 字符输入流
      FileWriter fw = null;
      try{
       fr = new FileReader("e:/from.txt"); // 读取的文件路径
       fw = new FileWriter("e:/to.txt"); 
       char[] buffer = new char[100];
       int temp = fr.read(buffer,0,buffer.length);
       fw.write(buffer,0,temp);
      //
       for(int i = 0; i<buffer.length; i++){
        System.out.println(buffer[i];
       }
      //
      }catch(Exception e){
       System.out.println(e);
      }finally{
       try{
        fr.close();
        fw.close();
       }catch(Exception e){
       System.out.println(e);
      }
      }
     }
    }

    装饰者模式

    BufferedReader 处理流 字符流 输入流,字符输入处理流。

    方法readLine()

    import java.io.*;
    class Test{
     public static void main(String args[]){
      FileReader fileReader = null;
      BufferedReader bufferedReader = null;
      tryl{
       fileReader = new FileReader("e:/from.txt");
       bufferedReader = new BufferedReader(fileReader);
       // readLine() 读取一行数据
       String line = bufferedReader.readLine();
       System.out.println(line); 
       // 
        String line = null;
        while(true){
         line = bufferedReader.readLine();
         if(line == null){
          break;
         }
         System.out.println(line);
        }
      }catch(Exception e){
       System.out.println(e);
      }finally{
       try{
        bufferedReader.close();
        fileReader.close();
      }catch(Exception e){
       System.out.println(e);
      }
     }
    } 

    工厂模式

    interface Student{
     public void doWork();
    }
    class Demo1 implements Student{
     public void doWork(){
      System.out.println("Demo1");
     }
    }
    class Demo2 implements Student{
     public void doWork(){
      System.out.println("Demo2");
     }
    }
    class Dashu implements Student{
     private Stuent student;
     public Dashu(Student student){
     this.student = student;
     }
     public void doWork(){
      System.out.println("dashu");
      student.doWork();
     }
    }
    class School{
     public static void main(String[] args){
       // 
       Demo1 demo1 = new Demo1();
       Dashu dashu = new Dashu(demo1);
       dashu.doWork();
     }
    }

    IO为输入输出的意思,从外面读取数据用InputStream,向外边写入数据用OutputStreamStream为流,在计算机中一切都是以二进制的字节构成的世界,InputStreamOutputStream来读取二进制,我们看起来会很麻烦,所以有了Reader/Writer的接口,用来处理这些字符流。

    FileReader fileReader = new FileReader("e:/from.txt");
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String line = bufferedReader.readLine();
    try{
    FileReader fileReader = new FileReader("e:/from.txt");
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    String line = null;
    while(true){
     line = bufferedReader.readLine();
     if(line == null){
      break;
     }
     System.out.println(line);
    }
    }catch(Exception e){
     System.out.println(e);
    }finally{
     try{
      bufferedReader.close();
      fileReader.close();
    }catch(Exception e){
     System.out.println(e);
    }

    增强API - NIO non-blocking IO

    Channel Buffer Selector 

    nio新加的,对线程是非阻塞的作用。

    往后余生,唯独有你
    简书作者:达叔小生
    90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
    简书博客: https://www.jianshu.com/u/c785ece603d1

    结语

    • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
    • 小礼物走一走 or 点赞
  • 相关阅读:
    git push :推送本地更改到远程仓库的三种模式
    GIT版本库回滚【图文版】
    微服务架构的分布式事务解决方案
    断路器-Hystrix的深入了解
    Elasticsearch顶尖高手系列课程推荐
    Dockerfile分离构建LNMP环境部署wordpress
    ELK 聚合查询
    tomcat日志采集
    ELK采集之nginx 之高德地图出城市IP分布图
    Elasticsearch 安装与集群配置
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11932469.html
Copyright © 2011-2022 走看看