zoukankan      html  css  js  c++  java
  • Java学习笔记40(缓冲流)

    缓冲流:

    在读写文件的各种流中,最令人烦恼的就是效率问题,

    而缓冲流的目的就是提高读写效率

    字节输出缓冲流:

    package demo;
    
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    //提高写入效率
    public class BufferedOutputStreamDemo {
        public static void main(String[] args) throws IOException {
            FileOutputStream fos = new FileOutputStream("d:\buffer.txt");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            bos.write(66);
            byte[] bytes = "HelloWorld".getBytes();
            bos.write(bytes);
            bos.close();
        }
    }

    字节输入缓冲流:

    package demo;
    
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class BufferedInputStreamDemo {
        public static void main(String[] args) throws IOException {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("d:\buffer.txt"));
            byte[] bytes = new byte[10];
            int len = 0;
            while ((len = bis.read(bytes)) != -1) {
                System.out.print(new String(bytes, 0, len));
            }
            bis.close();
        }
    }

    可以利用缓冲流复制文件,和以前的方法做对比:

    并且比较下复制时间

    package demo;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Copy {
        public static void main(String[] args) throws IOException {
            long s = System.currentTimeMillis();
            copy1(new File("d:\LOL.exe"), new File("e:\LOL.exe"));
            long e = System.currentTimeMillis();
            System.out.println(e - s);// 复制了14154毫秒(14秒)
    
            copy2(new File("d:\LOL.exe"), new File("e:\LOL.exe"));
            // 同样的方法测试时间:129毫秒(0.1秒)
    
            copy2(new File("d:\LOL.exe"), new File("e:\LOL.exe"));
            // 测试时间:94毫秒(不到0.1秒)
        }
    
        public static void copy1(File src, File desc) throws IOException {
            FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(desc);
            int len = 0;
            while ((len = fis.read()) != -1) {
                fos.write(len);
            }
            fos.close();
            fis.close();
        }
    
        public static void copy2(File src, File desc) throws IOException {
            FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(desc);
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, len);
            }
            fos.close();
            fis.close();
        }
    
        public static void copy3(File src, File desc) throws IOException {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc));
            int len = 0;
            byte[] bytes = new byte[1024 * 10];
            while ((len = bis.read(bytes)) != -1) {
                bos.write(bytes, 0, len);
            }
            bos.close();
            bis.close();
        }
    }

    字符缓冲输出流:

    package demo;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class BufferedWriterDemo{
        public static void main(String[] args) throws IOException {
            write();
        }
        public static void write() throws IOException{
            FileWriter fw = new FileWriter("d:\buffer.txt");
            BufferedWriter bfw1 = new BufferedWriter(fw);
            bfw1.write(100);
            bfw1.flush();
            bfw1.write("你好".toCharArray());
            bfw1.newLine();//特有换行方法
            //可以用
    换行,不过建议使用这种方法,具有平台无关性
            bfw1.flush();
            bfw1.write("HelloWorld");
            bfw1.flush();
            bfw1.close();        
        }
    }

    字符缓冲输入流:

    package demo;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class BufferedReaderDemo {
        public static void main(String[] args) throws IOException {
            read();
        }
    
        public static void read() throws IOException {
            int LineNumber = 0;
            BufferedReader bfr1 = new BufferedReader(new FileReader("d:\read.txt"));
            // 缓冲流特有方法,读取文本单行
            String line = null;
            while ((line = bfr1.readLine()) != null) {
                LineNumber++;
                System.out.println("第" + LineNumber + "行的内容:" + line);
            }
            bfr1.close();
        }
    }

    字符缓冲流复制文本文件:

    package demo;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Copy {
        public static void main(String[] args) throws IOException {
            BufferedReader bfr1 = new BufferedReader(new FileReader("d:\read.txt"));
            BufferedWriter bfw1 = new BufferedWriter(new FileWriter("e:\read.txt"));
            String line = null;
            while ((line = bfr1.readLine()) != null) {
                bfw1.write(line);
                bfw1.newLine();
                bfw1.flush();
            }
            bfw1.close();
            bfr1.close();
        }
    }

    关于各种流的操作规律和选用:

    1.明确是要读取还是写入(源和目的)

    2.明确是要操作什么类型的,字节还是文本?

    3.明确数据所在的设备,在硬盘中还是内存中,或者是网络?(这里还没有介绍内存流和socket)

    4.是否需要编码转换,需要利用缓冲流、数组提高效率码?

  • 相关阅读:
    Unity The Method Signature Matching Rule
    Unity The Property Matching Rule
    Unity The Type Matching Rule
    Unity The Custom Attribute Matching Rule
    Unity The Member Name Matching Rule
    Unity No Policies
    Unity The Return Type Matching Rule
    Unity The Parameter Type Matching Rule
    Unity The Namespace Matching Rule
    关于TSQL递归查询的(转)
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8295933.html
Copyright © 2011-2022 走看看