body, table{font-family: 微软雅黑}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

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

█ 一次读取一个字节
█ 一次读取一个字节数组
       ☞每次可以读取多个数据,提高了操作效率
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类,字节流缓冲区的更多相关文章

  1. java——io、字节流缓冲区拷贝文件、字节缓冲流

    使用try catch finally关闭文件流: 写入文件: import java.io.*; public class exp{ public static void main(String[] ...

  2. Java——IO类 字节流概述

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  3. Java IO: 其他字节流(上)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackInputStream,SequenceInputS ...

  4. Java IO 类一览表

    下表列出了大多数(非全部)按输/输出,基于字节或字符划分的 Java IO 类.

  5. [Java IO]02_字节流

    概要 字节流有两个核心抽象类:InputStream 和 OutputStream.所有的字节流类都继承自这两个抽象类. InputStream 负责输入,OutputStream 负责输出. 字节流 ...

  6. Java IO之字节流

    Java中的输入是指从数据源等读到Java程序中,这里的数据源可以是文件,内存或网络连接,输出则是指从Java程序中写到目的地. 输入输出流可以分为以下几种类型(暂时不考虑File类) 类名 中文名 ...

  7. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  8. Java IO流-字节流

    2017-11-05 17:48:17 Java中的IO流按数据类型分类分为两种,一是字节流,二是字符流.字符流的出现是为了简化文本数据的读入和写出操作. 如果操作的文件是文本文件,那么使用字符流会大 ...

  9. Java—IO流 字节流

    IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络…),即是将数据源读入到程序的通信通 ...

  10. java IO流——字节流

    字节流主要操作byte类型数据,以byte数组为准,主要操作类有InputStream(字节输入流).OutputSteam(字节输出流)由于IputStream和OutputStream都是抽象类, ...

随机推荐

  1. POJ 1830 开关问题(高斯消元)题解

    思路:乍一看好像和线性代数没什么关系.我们用一个数组B表示第i个位置的灯变了没有,然后假设我用u[i] = 1表示动开关i,mp[i][j] = 1表示动了i之后j也会跟着动,那么第i个开关的最终状态 ...

  2. 【第二十四章】 springboot注入servlet

    问:有了springMVC,为什么还要用servlet?有了servlet3的注解,为什么还要使用ServletRegistrationBean注入的方式? 使用场景:在有些场景下,比如我们要使用hy ...

  3. [shiro] - 怎样使用shiro?

    shiro是什么? Shiro是apache旗下的一个开源框架, 它将软件系统的安全认证相关的功能抽取出来, 实现用户身份认证, 权限授权, 加密, 会话管理等功能, 组成一个通用的安全认证框架. 为 ...

  4. [Pytorch]深度模型的显存计算以及优化

    原文链接:https://oldpan.me/archives/how-to-calculate-gpu-memory 前言 亲,显存炸了,你的显卡快冒烟了! torch.FatalError: cu ...

  5. 树莓派GPIO

  6. HDU 1711 Number Sequence(KMP模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. #include<iostream> #include<cs ...

  7. yaml 文件保存

    with open(mpath, "w") as f: yaml.safe_dump(yaml_dict,f,encoding='utf-8', allow_unicode=Tru ...

  8. spring boot开发 静态资源加载不出来

    spring boot 1.5 版本之前 不拦截静态资源 springboot 2.x版本 拦截静态资源 private static final String[] CLASSPATH_RESOURC ...

  9. Codeforces 447D - DZY Loves Modification

    447D - DZY Loves Modification 思路:将行和列分开考虑.用优先队列,计算出行操作i次的幸福值r[i],再计算出列操作i次的幸福值c[i].然后将行取i次操作和列取k-i次操 ...

  10. m_Orchestrate learning system---三十四、使用重定义了$的插件的时候最容易出现的问题是什么

    m_Orchestrate learning system---三十四.使用重定义了$的插件的时候最容易出现的问题是什么 一.总结 一句话总结:如下面这段代码,定义了$的值,还是会习惯性的把$当成jQ ...