zoukankan      html  css  js  c++  java
  • 字节流+字符流

    1、 IO流用来处理设备之间的数据传输
     a) 上传文件
     b) 下载文件
    2、 Java对数据的操作都是通过流的方式
    3、 Java 用于操作流的对象都在IO包中
    4、 IO流分类
     a) 流向
      i. 输入流:程序读取数据
      ii. 输出流:程序向硬盘写入数据
     b) 数据类型
      i. 字节流:
       1. 字节输入流 读数据 InputStream
       2. 字节输出流 写数据 OutPutStream
      ii. 字符流:为了方便操作文本数据
       1. 字符输入流 读数据 Reader
       2. 字符输出流 写数据 Writer
     c) 默认按照数据类型进行分类。
    5、基本流和高级流
     基本流:可以直接操作文件的
      FileInputStream
      FileOutputStream
      FileReader
      FileWriter
      …………
     高级流:在基本流基础上提供一些其他功能
     其中PrintStream、PrintStream既是基本流又是高级流
    6、 总结
     a) 字符流复制数据5种方式:
      i. 字符缓冲区每次复制一个字符数组
      ii. 字符缓冲区每次复制一个字符
      iii. 每次复制一个字符数组
      iv. 每次复制一个字符
      v. 每次复制一行数据
     b) 字节流复制数据的4种方式
      i. 字节缓冲区每次复制一个字节数组
      ii. 字节缓冲区每次复制一个字节
      iii. 每次复制一个字节数组
      iv. 每次复制一个字节

     复制文件

    publicclass CopyFileTest {

        publicstaticvoid main(String[] args) throws IOException {

            //1,明确源和目的。

            File srcFile = new File("c:\YesDir est.JPG");

            File destFile = new File("copyTest.JPG");

           

            //2,明确字节流 输入流和源相关联,输出流和目的关联。

            FileInputStream fis = new FileInputStream(srcFile);

            FileOutputStream fos = new FileOutputStream(destFile);

           

            //3, 使用输入流的读取方法读取字节,并将字节写入到目的中。

            int ch = 0;

            while((ch=fis.read())!=-1){

                fos.write(ch);

            }

            //4,关闭资源。

            fos.close();

            fis.close();

        }

    }

    上述代码输入流和输出流之间是通过ch这个变量进行数据交换的。

    上述复制文件有个问题,每次都从源文件读取一个,然后在写到指定文件,接着再读取一个字符,然后再写一个,一直这样下去。效率极低

       缓冲数组方式复制文件

    publicclass CopyFileByBufferTest {

        publicstaticvoid main(String[] args) throws IOException {

            File srcFile = new File("c:\YesDir est.JPG");

            File destFile = new File("copyTest.JPG");

            // 明确字节流 输入流和源相关联,输出流和目的关联。

            FileInputStream fis = new FileInputStream(srcFile);

            FileOutputStream fos = new FileOutputStream(destFile);

            //定义一个缓冲区。

            byte[] buf = newbyte[1024];

            int len = 0;

            while ((len = fis.read(buf)) != -1) {

                fos.write(buf, 0, len);// 将数组中的指定长度的数据写入到输出流中。

            }

            // 关闭资源。

            fos.close();

            fis.close();

        }

    }

    速度要快

     

    复制文本文件

    我们一般用字符流复制文本文件

    publicclass CopyTextFileTest {

        publicstaticvoid main(String[] args) throws IOException {

            copyTextFile();

        }

        publicstaticvoid copyTextFile() throws IOException {

            //1,明确源和目的。

            FileReader fr = new FileReader("c:\cn.txt");

            FileWriter fw = new FileWriter("c:\copy.txt");

            //2,为了提高效率。自定义缓冲区数组。字符数组。

            char[] buf = newchar[1024];

            int len = 0;

            while((len=fr.read(buf))!=-1){

                fw.write(buf,0,len);

            }

            /*2,循环读写操作。效率低。

            intch = 0;

            while((ch=fr.read())!=-1){

                fw.write(ch);

            }

            */

            //3,关闭资源。

            fw.close();

            fr.close();

        }

    }

  • 相关阅读:
    【JZOJ6223】【20190617】互膜
    【JZOJ6225】【20190618】计数
    【JZOJ6226】【20190618】纳什均衡
    【JZOJ6210】【20190612】wsm
    【学习笔记】析合树
    【JZOJ6206】【20190610】二分图边染色
    【loj3123】【CTS2019】重复
    【loj3120】【CTS2019】珍珠
    【loj3119】【CTS2019】随机立方体
    CTS&&APIO2019爆零记
  • 原文地址:https://www.cnblogs.com/sy130908/p/11474416.html
Copyright © 2011-2022 走看看