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. c#传统SqlTransaction事务和TransactionScope事务

    事务有很多种,看了一些关于事务的问题,这里做下笔记····· 事务时单个的工作单位.如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中永久的组成部分.若果事务遇到错误,则必须取消或 ...

  2. 配置文件(Machine.config、Web.config、App.config)

    Machine.config1.该文件在Windows目录下\Microsoft.net\framework\[version]\Config\2.为了提高性能,该文件只包含不同于默认值的设置.并且定 ...

  3. 【Android实验】第一个Android程序与Activity生命周期

    目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...

  4. pycaffe编译

    环境:ubuntu14.04  python2.7  caffe已经成功编译 1,首先确保pip已经安装 sudo apt-get install python-pip 2,在caffe-master ...

  5. 机器学习-数据可视化神器matplotlib学习之路(一)

    直接上代码吧,说明写在备注就好了,这次主要学习一下基本的画图方法和常用的图例图标等 from matplotlib import pyplot as plt import numpy as np #这 ...

  6. 数组类型的退化Decay

    Decay即数组在某些情况下将退化为指针. 测试代码: #include <iostream> #include <typeinfo> template <typenam ...

  7. Enumerable扩展方法

    主要记录一些平时在工作中用到操作Enumerable的常用方法 /// <summary> /// The i enumerable extension. /// </summary ...

  8. RabbitMQ入门_15_访问控制

    参考资料:https://www.rabbitmq.com/access-control.html A. 核心概念 Virtual Host:虚拟主机为 RabbitMQ 中的资源提供了逻辑分组与隔离 ...

  9. URAL 1741 Communication Fiend

    URAL 1741 思路: dp 状态:dp[i][1]表示到第i个版本为正版的最少流量花费 dp[i][0]表示到第i个版本为盗版的最少流量花费 初始状态:dp[1][0]=dp[0][0]=0 目 ...

  10. Python BeautifulSoup的使用

    2017-07-24 22:39:14 Python3 中的beautifulsoup引入的包是bs4 import requests from bs4 import * r = requests.g ...