当前位置: 首页 > 编程笔记 >

Java字节缓冲流原理与用法详解

孔阎宝
2023-03-14
本文向大家介绍Java字节缓冲流原理与用法详解,包括了Java字节缓冲流原理与用法详解的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Java字节缓冲流原理与用法。分享给大家供大家参考,具体如下:

一 介绍

BufferInputStresm和BufferOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。

二 各类中方法比较

从应用程序中把输入放入文件,相当于将一缸水倒入另外一个缸中:
FileOutputStream的write方法:相当于一滴一滴地把水“转移过去。
DataOutputStream的writeXXX方法:相当于一瓢一瓢地把水转移过去。
BufferOutputStream的write方法:相当于一瓢一瓢先把水放入的桶中,再将桶中的水倒入缸中,性能提高了。

三 应用——带缓冲区的拷贝

/**
 * 进行文件的拷贝,利用带缓冲的字节流
 * @param srcFile
 * @param destFile
 * @throws IOException
 */
public static void copyFileByBuffer(File srcFile,File destFile)throws IOException{
    if(!srcFile.exists()){
        throw new IllegalArgumentException("文件:"+srcFile+"不存在");
    }
    if(!srcFile.isFile()){
        throw new IllegalArgumentException(srcFile+"不是文件");
    }
    BufferedInputStream bis = new BufferedInputStream(
            new FileInputStream(srcFile));
    BufferedOutputStream bos = new BufferedOutputStream(
            new FileOutputStream(destFile));
    int c ;
    while((c = bis.read())!=-1){
        bos.write(c);
        bos.flush();//刷新缓冲区
    }
    bis.close();
    bos.close();
}

四 应用——单字节,不带缓冲的拷贝

/**
 * 单字节,不带缓冲进行文件拷贝
 * @param srcFile
 * @param destFile
 * @throws IOException
 */
public static void copyFileByByte(File srcFile,File destFile)throws IOException{
    if(!srcFile.exists()){
        throw new IllegalArgumentException("文件:"+srcFile+"不存在");
    }
    if(!srcFile.isFile()){
        throw new IllegalArgumentException(srcFile+"不是文件");
    }
    FileInputStream in = new FileInputStream(srcFile);
    FileOutputStream out = new FileOutputStream(destFile);
    int c ;
    while((c = in.read())!=-1){
        out.write(c);
        out.flush();
    }
    in.close();
    out.close();
}

五 测试——各种拷贝比较

package com.imooc.io;
import java.io.File;
import java.io.IOException;
public class IOUtilTest4 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            long start = System.currentTimeMillis();
            IOUtil.copyFileByByte(new File("e:\\javaio\\demo.mp3"), new File(
                    "e:\\javaio\\demo2.mp3")); //两万多毫秒
            long end = System.currentTimeMillis();
            System.out.println(end - start );
            start = System.currentTimeMillis();
            IOUtil.copyFileByBuffer(new File("e:\\javaio\\demo.mp3"), new File(
                    "e:\\javaio\\demo3.mp3"));//一万多毫秒
            end = System.currentTimeMillis();
            System.out.println(end - start );
            start = System.currentTimeMillis();
            IOUtil.copyFile(new File("e:\\javaio\\demo.mp3"), new File(
                    "e:\\javaio\\demo4.mp3"));//7毫秒
            end = System.currentTimeMillis();
            System.out.println(end - start );
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

六 测试结果

13091
9067
10

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

 类似资料:
  • 本文向大家介绍详解java IO流之缓冲流的使用,包括了详解java IO流之缓冲流的使用的使用技巧和注意事项,需要的朋友参考一下 java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件或其他目标频繁读写或操作效率低,效能差。这时使用缓冲流能够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。所以说,缓冲流还是很重要的,在IO操作时记

  • 本文向大家介绍BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理,包括了BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 BufferedInputStream 介绍 BufferedInputStream 是缓冲输入流。它继承于FilterInputStream。 BufferedInput

  • 用这种方式将字节缓冲符转换为字符串是否正确, 我问这个问题的原因是,这看起来太简单了,而像Java这样的其他方法:将字符串转换成字节缓冲符和相关问题看起来更复杂。

  • 本文向大家介绍详解Java中字符流与字节流的区别,包括了详解Java中字符流与字节流的区别的使用技巧和注意事项,需要的朋友参考一下 本文为大家分析了Java中字符流与字节流的区别,供大家参考,具体内容如下 1. 什么是流     Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中

  • 本文向大家介绍Java字符流与字节流区别与用法分析,包括了Java字符流与字节流区别与用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java字符流与字节流区别与用法。分享给大家供大家参考,具体如下: 字节流与字符流主要的区别是他们的的处理方式 流分类: 1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。 2.Ja

  • 本文向大家介绍详解JAVA 字节流和字符流,包括了详解JAVA 字节流和字符流的使用技巧和注意事项,需要的朋友参考一下 1、InputStream 和 Reader InputStream 和 Reader 是所有输入流的抽象基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板,所以它们的方法是所有输入流都可使用的方法。 在 InputStream 里包含如下三个方法。 int rea