• Java IO 流


      一、字节流

      二、字符流

    IO 的分类可以为:

    按流操作的数据类型可以分为:字节流 、 字符流

    按流的数据方向:输入流、输出流 等

     

     一、字节流

    InputStreamread方法,一次读取一个字节,OutputStreamwrite方法一次写一个int。这两个类都是抽象类。意味着不能创建对象,那么需要找到具体的子类来使用。操作流的步骤都是:
    第一步:1:打开流(即创建流)
    第二步:2:通过流读取内容
    第三步:3:用完后,关闭流资源
    案例一:使用read 逐个读取
         File file = new File("d:/a.txt");
    
            InputStream inputStream = new FileInputStream(file);
    
            int length = 0;
    
            while ((length = inputStream.read())!=-1) {
                System.out.print((char)length);
            }

    案例二:使用read 读取一个字节数组,提高效率

            File file = new File("d:/a.txt");
    
            InputStream inputStream = new FileInputStream(file);
    
            byte[] buf = new byte[1024];
    
            int length = 0;
    
            length = inputStream.read(buf);
    
            for(int i=0;i<length;i++){
                System.out.print((char)buf[i]);
            }    

    案例三:read 使用字节数组缓存,提高效率

           FileInputStream fis = new FileInputStream(path);
           byte[] byt = new byte[1024];
           int len = 0;
           while ((len = fis.read(byt)) != -1) {
               System.out.println(new String(byt, 0, len));
           }
           fis.close();    
    OutputStramwrite方法,一次只能写一个字节。成功的向文件中写入了内容。但是并不高效,如何提高效率呢?可以使用缓冲,
    OutputStram类中有write(byte[] b)方法,将 b.length个字节从指定的 byte 数组写入此输出流中
    案例四:write 写单个字符
            File file = new File("d:/a.txt");
            OutputStream outputStream = new FileOutputStream(file);
    
            outputStream.write('a');
            outputStream.write('+');
            outputStream.write('b');
            outputStream.write('=');
            outputStream.write('c');
            outputStream.close();    

    案例五: write 写一个 byte 数组

            File file = new File("d:/a.txt");
            OutputStream outputStream = new FileOutputStream(file);
    
            byte[] buf = "a+b = c".getBytes();
            outputStream.write(buf);
            outputStream.close();    

    案例六:实现文件的拷贝

            InputStream inputStream = new FileInputStream("d:/a.txt");
    
            OutputStream outputStream = new FileOutputStream("d:/b.txt");
    
            byte[] buf = new byte[1024];
    
            int size = 0;
    
            while ((size=inputStream.read(buf))!=-1){
                outputStream.write(buf,0,size);
            }
    
            inputStream.close();
            outputStream.close();    

    缓冲流

    Java其实提供了专门的字节流缓冲来提高效率。BufferedInputStreamBufferedOutputStream。BufferedOutputStreamBufferedOutputStream类可以通过减少读写次数来提高输入和输出的速度。它们内部有一个缓冲区,用来提高处理效率。查看API文档,发现可以指定缓冲区的大小。其实内部也是封装了字节数组。没有指定缓冲区大小,默认的字节是8192。显然缓冲区输入流和缓冲区输出流要配合使用。首先缓冲区输入流会将读取到的数据读入缓冲区,当缓冲区满时,或者调用flush方法,缓冲输出流会将数据写出。
    注意:当然使用缓冲流来进行提高效率时,对于小文件可能看不到性能的提升。但是文件稍微大一些的话,就可以看到实质的性能提升了。
          InputStream inputStream = new FileInputStream("d:/a.txt");
            OutputStream outputStream = new FileOutputStream("d:/b.txt");
    
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
    
            int size = 0;
    
            while ((size=bufferedInputStream.read())!=-1){
               bufferedOutputStream.write(size);
            }
    
            bufferedInputStream.close();
            bufferedOutputStream.close();
            inputStream.close();
            outputStream.close();

    二、字符流



    参考:https://www.jianshu.com/p/48f2fb0b79b5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

  • 相关阅读:
    Python学习-字符编码浅析
    python元组,集合类型,及字典补充
    python字符串,列表常用操作
    python流程控制
    Python之线程&进程
    yii框架的中的一些使用介绍
    《最牛B的Linux Shell命令》笔记
    CentOS6.8上安装epel
    mysql 5.7 Group Replication
    mysql5.7 参数记录 (持续更新)
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/12149652.html
Copyright © 2020-2023  润新知