JAVA IO概述

IO(输入和输出)

Linux是一个将设备抽象为文件的操作系统,在Linux中所有的外部设备都可以用读取文件的方法读取,这样编程人员就可以以操作文件的方法操作任何设备。

Java中使用IO(输入输出)进行读写 设备例如 硬盘文件、内存、键盘等等,根据数据的走向可分为输入流和输出流,这个走向是以内存为基准的,即往内存中读数据是输入流,从内存中往外写是输出流。

IO以内存区分

  • :代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象
  • 流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
  • 流的作用:为数据源和目的地建立一个输送通道。

Java中将数据的输入输出抽象为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。

流具有最基本的特点:“One dimension , one direction .” 即流是一维的,同时流是单向的。单向也就是只可以一个方向(按顺序从头至尾依次)读取,不可以读到某个位置,再返回前面某个位置。流的概念和实际水流的概念基本一致,水只可以从高向低一个方向流动。我们某时在目地喝了一口水,下次在同一个地点喝水已经不是当时的那片水了。

根据处理的数据类型可分为字节流和字符流

  1. 字节流通常以“stream”命名,比如InputStream和OutputStream。除了DataInputStream 和DataOutputStream 还能够读写int, long, float和double类型的值以外,其他流在一个操作时间内只能读取或者写入一个原始字节。
  2. 字符流通常以“Reader”或者“Writer”命名。字符流能够读写字符(比如Latin1或者Unicode字符)。

字节/符流区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

一般来讲如果是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。

字节流案例

        byte[] buffer=new byte[1024];   //一次取出的字节数大小,缓冲区大小  
        int numberRead=0;
        FileInputStream input=null;
        FileOutputStream out =null;
        try {
            input=new FileInputStream("/data/file/temp/1.jpg");
            out=new FileOutputStream("/data/file/temp/2.jpg"); //如果文件不存在会自动创建  

            while ((numberRead=input.read(buffer))!=-1) {  //numberRead的目的在于防止最后一次读取的字节小于buffer长度,  
                out.write(buffer, 0, numberRead);       //否则会自动被填充0  
            }
        } catch (IOException e) { 
            e.printStackTrace();
        }finally{
            try {
                input.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

字符流案例


        //读取的字符数
        char chars[] = new char[1024];
        
        FileReader freader = null;
        FileWriter fwriter = null;
        
        try {
            
            freader = new FileReader("/data/file/temp/1.text");
            File f1 = new File("/data/file/temp/2.txt");
            if(!f1.exists()){
                f1.createNewFile();
            }
            fwriter = new FileWriter(f1);
            
            while((freader.read(chars))!= -1)
            {
                fwriter.write(chars);
            }
            

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try{
                freader.close();
                fwriter.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

IO流

Java IO中包含了许多InputStream、OutputStream、Reader、Writer的子类。每一个类都都对应处理不同的功能。它们一起完善Java IO。
IO流

猜你喜欢

转载自blog.csdn.net/weixin_43430036/article/details/83657950