Document

IO流的文件输入输出效率问题

IO流的文件输入输出效率问题

第一种方法

我用使用一个数组,把FIleInputStream获取到的二进制数存入这个数组,然后使用FIleOutputStream进行输出

缺点:速度慢

优点:不消耗内存

 FileInputStream fis = null;
        FileOutputStream fos = null;
        try{
            fis = new FileInputStream("D:\\IOTest\\侠客.jpg");
            fos = new FileOutputStream("D:\\IOTest\\侠客2.jpg");
            // 增加缓冲区   提高效率
            byte[] bull = new byte[1024];
            int temp = 0;
            while ((temp = fis.read(bull))!= -1){
                // fos.write(temp);
                fos.write(bull,0,temp);
            }
            fos.flush();//刷新  将文件输出到指定的位置
        }catch (Exception e){
            e.fillInStackTrace();
        }finally {
            try {
                if (fis != null) {
                    fis.close();
                }
                if (fos != null){
                    fos.close();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
        }

第二种方法

我们使用FIleInputStream里的available()方法,这个方法会预估我们读取的资源,然后告诉我们一个合理的空间,一次性输出过去

缺点:在文件大的时候,消耗内存

优点:速度快

FileInputStream fis = null;
        FileOutputStream fos = null;
        try{
            fis = new FileInputStream("D:\\IOTest\\侠客.jpg");
            fos = new FileOutputStream("D:\\IOTest\\侠客1.jpg");
            // 增加缓冲区   提高效率
            byte[] bull = new byte[fis.available()];
            fis.read(bull);
            fos.write(bull);
            fos.flush();//刷新  将文件输出到指定的位置
        }catch (Exception e){
            e.fillInStackTrace();
        }finally {
            try {
                if (fis != null) {
                    fis.close();
                }
                if (fos != null){
                    fos.close();
                }
            }catch (Exception e){
                e.fillInStackTrace();
            }
        }
posted @ 2022-08-22 21:38  一蓑烟雨任平生。。  阅读(70)  评论(0)    收藏  举报
Document