输入流中可以通过缓冲区来加大读取的效率,sun公司感觉可以加快执行效率,他就为我们提供了一个类来操作缓存区。

Buffer来头的类:所有缓冲流都是以Buffer开头的;

学习缓冲流的作用:

BufferedInputStream:缓冲输入字节流,  目的:  提高读取文件的效率。

注意点: BufferedInputSteam  他是没有读写数据的功能,

内部实现:    里面维护了一个8字节的byte的数组

BufferedInputStream  使用步骤:
  1.找到一个目标文件

2.建立通道  FileInputStream

3.创建一个缓冲字节流输入流,里面传入一个InputStream

4.读取数据

5.关闭资源

BufferedOutputStream:缓冲字节流输出流,内部维护一个 8 字节的数组

作用: 提供文件的输出效率,可以提供其他的方法

使用步骤:

1.找目标

2.建立通道  FileOutputStream

3.创建一个缓冲区字节流输出流

4.写数据,不会写入到磁盘中,如果数组中的数据已经满了,会自动将数据写入到磁盘中

5.将数据写入到磁盘:调用Flush(): h或者关闭资源

6.关闭资源

字符流:读的也是二进制文本,他会帮我们解码成我们看的懂得字符

字符流 = 字节流 + 解码

Reader:它是字符输入流的根类,抽象

FileReader 文件字符输入流,读取字符串

FileReader的用法:

1.找到目标文件

2.建立数据的通道

3.建立一个缓冲区

4.读取数据

5.关闭资源

一个汉字是占两个字节,字节流用的是read()一次只读取一个字节

学习到的输入流: FileInputStream  BufferedInnputStream  FileReader

输入流:以InputStream或者Reader结尾

输出字符流:Write :字符输出流根类 ,抽象的类

FileWrite  文件数据的输出字符流

字符输出流的使用注意点:

    1.Filereader内部维护了一个1024个字符的数组,所以在写入数据的时候,它是现将数据写入到内部的字符数组中,如果需要将数据写入键盘中,需要用到flush()或者关闭或者字符数据存满了

    2.如果我们需要想文件中追加数据,需要使用new FileWrite(File,boolean)构造方法,第二个参数true

    3.如果指定的文件不存在,也会自己创建一个

eg:用字符流来拷贝图片:

    字符流 = 字节流 + 解码 ----->找到对应的码表 GBK

    字符流解码:拿到系统默认的编码方式来解码

将图片中的二进制数据和GBK码表中的值进行对比,对比的时候会出现二进制文件在码表中找不到嘴一个的值,他会将二进制数据标记为未知字符,当我在写入数据的是后台会将未知的字符丢掉

图片数据不需要将数据解析为我们看的懂得字符

使用字节流的场景:读写的数据不需要转为我能够看得懂的字符,比如:图片,视屏

使用字符流的场景:如果读写的是字符数据

public class Dmeo2 {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
copyImg();
}

public static void copyImg() throws IOException{
//1.找到指定的文件
File file = new File("D:\\images\\03.jpg");
File dir = new File("D:\\03.jpg");

//2.创建输入输出字符流
FileReader fileReader = new FileReader(file);
FileWriter fileWriter = new FileWriter(dir);

//3.复制文件
char[] c = new char[1024];
int length = 0;
while ((length = fileReader.read(c))!= -1) {

fileWriter.write(c); //写入到内部维护的数组。
fileWriter.flush(); // 刷新,让数据边度边写
}
fileWriter.close();
fileReader.close();
}

}

BufferedWrite:缓冲字符输出流:

内部提供一个8192长度的字符数组作为这样一个缓冲区

BufferedWrite作用:提高写入的效率,拓展FileWrite的功能。

Buffer类的更多相关文章

  1. Node.js权威指南 (5) - 使用Buffer类处理二进制数据

    5.1 创建Buffer对象 / 705.2 字符串的长度与缓存区的长度 / 725.3 Buffer对象与字符串对象之间的相互转换 / 74 5.3.1 Buffer对象的toString方法 / ...

  2. Node.js系列:Buffer类的使用

    客户端JavaScript中没有对二进制数据提供很好的支持.但是在处理TCP流或文件流时,必须要处理二进制数据.Node.js定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区. Buf ...

  3. Node.js之使用Buffer类处理二进制数据

    Node.js之使用Buffer类处理二进制数据 Buffer类可以在处理TCP流或文件流时处理二进制数据,该类用来创建一个专门存放二进制数据的缓存区. 1. 创建Buffer对象 1.1 直接创建: ...

  4. 浅析nodejs的buffer类(转)

    最近翻阅了node v0.10.4的buffer类的源代码,收获不少,也很久没有在cnode上发表文章了,想把一些收获分享给大家,有什么错误的地方希望大牛们指正啊. 前阵子有位rrestjs框架的使用 ...

  5. node.js—Buffer类(二进制数据处理模块)

    Buffer类概述 一个用于更好的操作二进制数据的类 我们在操作文件或者网络数据的时候,其实操作的就是二进制数据流 Node为我们提供了一个更加方便的去操作这种数据流的类 Buffer,他是一个全局的 ...

  6. nodeJS-使用buffer类处理二进制数据

    使用buffer类处理二进制数据 在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持.然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据.因此在node ...

  7. C++实现的Buffer类

    写C#的同志一定觉得Byte []比C++的 BYTE * 加 Length的方式好的多.一来,只需要一个对象就可以是表示一段字节流,另一方面,由于C#的特性,不需要象C++那样还要记得删除指针.由于 ...

  8. Buffer类的详解(转)

    Buffer 类是 java.nio 的构造基础.一个 Buffer 对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里,数据可被存储并在之后用于检索.缓冲区可以被写满或释放.对于 ...

  9. Java NIO中的Buffer类

    Buffer     缓冲,用于批量读写数据 Buffer是一个抽象类,基本数据类型都有实现类:XxxBuffer,比如ByteBuffer.CharBuffer.IntBuffer.DoubleBu ...

  10. 浅析nodejs的buffer类

    1.什么时候该用buffer,什么时候不该用 看一下如下的测试代码,分别是拼接各种不同长度的字符串,最后直接拼接了10MB的字符串 var string,string2,string3; var bu ...

随机推荐

  1. CSS Hack

    CSS HACK,网上有很多,主要是IE版本不同造成的,尽量不要用CSS HACK,实在调不过去可以用一用,相信以后随着IE低版本的淘汰,CSS HACK也将不在使用. 类内部HACK IE6识别 - ...

  2. 【poj2154】 Color

    http://poj.org/problem?id=2154 (题目链接) 题意 n个珠子的项链,可以染上n中颜色,项链可以旋转不能翻转,求染色方案数. Solution 经典的公式: \begin{ ...

  3. Asp.net MVC的ViewData与ViewBag以及TemplateData的使用与区别

    ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP.NET MVC3 才有 基于Asp.net 3.5 fram ...

  4. OVGap iOS与Javascript交互(H5与原生APP交互)

    源代码:https://github.com/windshg/OVGap OVGap:一个轻量级的类库,能够让iOS应用和远程网页的 Javascript 代码进行通信,也就是说,远程的 Javasc ...

  5. Linux--Tail命令

    inux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案 ...

  6. NSString属性什么时候用copy,什么时候用strong?

           我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy.那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢 ...

  7. 为你的pip更换一个国内的镜像源

    为你的pip更换一个国内的镜像源 是否常常为pypi官网被无故和谐掉导致pip不能下载python的各个包而痛心疾首? 是否常常在深夜里看着pip install 下载包的速度慢如乌龟而长吁短叹? 是 ...

  8. [Unreal]学习笔记之灯光说明

    利用灯光通道,实现局部照亮效果 没有更改Channel之前的效果: 需要将网格物体设置为可移动 将灯光和被照亮物体的Channel设置为同样并且非0零: 设置成功后,就可以实现局部照亮

  9. LibreOffice去重复数据

    菜单:数据--更多筛选---标准筛选 点开“选项”,勾上“无重复值”. 然后还可以把结果复制到其它单元格.

  10. 第一章 Shiro简介——《跟我学Shiro》(转)

    目录贴:跟我学Shiro目录贴 1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可 ...