Java——IO类,字节流缓冲区

Posted 正在加载……

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java——IO类,字节流缓冲区相关的知识,希望对你有一定的参考价值。

字节流读取数据两种方式比较

█ 一次读取一个字节
█ 一次读取一个字节数组
       ?每次可以读取多个数据,提高了操作效率
public class CopyDemo {
//第一步:将1.txt中的内容读入到内存            FileInputStream
//第二步:将内存中读入的数据读入到2.txt      FileOutputStream
//使用字节流来copy东西不会出现乱码,因为是把所有东西照搬过去,没有拿出来解析
public static void main(String[] args) throws IOException {
                FileInputStream fis = new FileInputStream("我的滑板鞋.mp4");    //任何文件格式都可以拷贝
                FileOutputStream fos = new FileOutputStream("kaobei.mp4");
//方法一:  效率低下,一次一个字节
/*             int b = 0;
                while((b = fis.read()) != -1){
                        fos.write(b);
                }*/
//方法二:  效率高,一次整个数组
                byte[] bytes = new byte[1024];
                int len = 0;
                while((len = fis.read(bytes)) != -1){
                        fos.write(bytes,0,len);
                }
                fis.close();
                fos.close();               
        }
}





字节缓冲流    ( 包装流,加入了一些缓冲区 8092 byte )

█ 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的情况,所以提供了字节缓冲区流
█ 字节缓冲输出流
        ?BufferedOutputStream
            BufferedInputStream(InputStream in);           //缓冲区大小默认是8192
创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
            BufferedInputStream(InputStream in, int size); 
创建具有指定缓冲区大小的

█ 字节缓冲输入流
        ?BufferedInputStream
           BufferedOutputStream(OutputStream out);        
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
           BufferedOutputStream(OutputStream out, int size);        
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

public class BufferTestMain {
        public static void main(String[] args) throws IOException {
                FileInputStream fis = new FileInputStream("我的滑板鞋.mp4");  
// 这样的fis不带缓冲区
                BufferedInputStream bfis = new BufferedInputStream(fis);
                FileOutputStream fos = new FileOutputStream("kaobei.mp4");
                BufferedOutputStream bfos = new BufferedOutputStream(fos);

// 方法一:
/*             int b = 0;
                while ((b = bfis.read()) != -1) { 
 //看上去是一个字节一个字节的读,其实系统实现是一次读 8192 个字节到缓冲区
                        bfos.write(b);
                }*/
// 方法二:更快,缓冲区自带一个8192缓冲区,自己还定义了一个1024的缓冲区       
                byte[] bytes = new byte[1024];
                int len = 0;
                while ((len = bfis.read(bytes)) != -1) {
                        bfos.write(bytes, 0, len);
                }
        }
}

以上是关于Java——IO类,字节流缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

Java之 IO流字符流字节流缓冲流对象流等各种流

java 节点流(字符流,字节流)和包装流(缓冲流,转换流)

IO流 - 复制文件(字节缓冲流+字节流)

Java学习笔记6.1.3 字节流 - 字节流缓冲区与缓冲字节流

Java学习笔记6.1.3 字节流 - 字节流缓冲区与缓冲字节流

IO流——字节流