Buffer类
输入流中可以通过缓冲区来加大读取的效率,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类的更多相关文章
- Node.js权威指南 (5) - 使用Buffer类处理二进制数据
5.1 创建Buffer对象 / 705.2 字符串的长度与缓存区的长度 / 725.3 Buffer对象与字符串对象之间的相互转换 / 74 5.3.1 Buffer对象的toString方法 / ...
- Node.js系列:Buffer类的使用
客户端JavaScript中没有对二进制数据提供很好的支持.但是在处理TCP流或文件流时,必须要处理二进制数据.Node.js定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区. Buf ...
- Node.js之使用Buffer类处理二进制数据
Node.js之使用Buffer类处理二进制数据 Buffer类可以在处理TCP流或文件流时处理二进制数据,该类用来创建一个专门存放二进制数据的缓存区. 1. 创建Buffer对象 1.1 直接创建: ...
- 浅析nodejs的buffer类(转)
最近翻阅了node v0.10.4的buffer类的源代码,收获不少,也很久没有在cnode上发表文章了,想把一些收获分享给大家,有什么错误的地方希望大牛们指正啊. 前阵子有位rrestjs框架的使用 ...
- node.js—Buffer类(二进制数据处理模块)
Buffer类概述 一个用于更好的操作二进制数据的类 我们在操作文件或者网络数据的时候,其实操作的就是二进制数据流 Node为我们提供了一个更加方便的去操作这种数据流的类 Buffer,他是一个全局的 ...
- nodeJS-使用buffer类处理二进制数据
使用buffer类处理二进制数据 在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持.然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据.因此在node ...
- C++实现的Buffer类
写C#的同志一定觉得Byte []比C++的 BYTE * 加 Length的方式好的多.一来,只需要一个对象就可以是表示一段字节流,另一方面,由于C#的特性,不需要象C++那样还要记得删除指针.由于 ...
- Buffer类的详解(转)
Buffer 类是 java.nio 的构造基础.一个 Buffer 对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里,数据可被存储并在之后用于检索.缓冲区可以被写满或释放.对于 ...
- Java NIO中的Buffer类
Buffer 缓冲,用于批量读写数据 Buffer是一个抽象类,基本数据类型都有实现类:XxxBuffer,比如ByteBuffer.CharBuffer.IntBuffer.DoubleBu ...
- 浅析nodejs的buffer类
1.什么时候该用buffer,什么时候不该用 看一下如下的测试代码,分别是拼接各种不同长度的字符串,最后直接拼接了10MB的字符串 var string,string2,string3; var bu ...
随机推荐
- [转]mysql 视图
转载自http://blog.csdn.net/evankaka/article/details/47071133 一. 视图概述 视图是一个虚拟表,其内容由查询定义.带来许多好处: 1. 视图能简化 ...
- sqlserver多文件组数据库的备份和还原实战
数据库文件过大时就要进行数据分区,就是讲数据库拆分到多个文件组中.已方便数据文件管理,提高数据库的读取效能,多文件组如何进行数据库的备份和还原呢,今天主要做多文件组数据库的备份和还原实验. 第一步 创 ...
- QR 二维码总结
@(Java ThirdParty)[QR] QR 二维码总结 根据Wiki中的介绍,QR Code(Quick Response Code),二维条形码,由日志设计应用于汽车制造工业中.条形码中包含 ...
- excel工具类
excel工具类 import com.iport.framework.util.ValidateUtil; import org.apache.commons.lang3.StringUtils; ...
- 在QtCreator中使用doxygen
接触Doxygen后,认识到其强大之处,一口气将之前的烂代码重构了一遍,所有的文件头,函数注释等等都是手动添加注释.在keil中可以看到其对JavaDoc风格的注释有高亮,非常好看.但是keil这个I ...
- 第一章 Part 2/2 Git 一览
被跟踪文件(Tracked files) 被跟踪文件是 Git 管理的工作目录 (存储库) 中的文件.当你添加新文件或使更新现有文件时,Git都会跟踪这些文件变化.在某个时间点,你将通过命令将这些文件 ...
- Android广播接收器BroadcastRceiver
一.使用BroadcastRceiver 1.创建BroadcastRceiver(MyRceiver),重写OnReceiver: public void onReceive(Context con ...
- [Machine Learning & Algorithm]CAML机器学习系列2:深入浅出ML之Entropy-Based家族
声明:本博客整理自博友@zhouyong计算广告与机器学习-技术共享平台,尊重原创,欢迎感兴趣的博友查看原文. 写在前面 记得在<Pattern Recognition And Machine ...
- 在SQL中 给字符串补0方法
--第一种方法SELECT RIGHT('00000'+CAST(ID AS nvarchar(50)),5) FROM dbo.TableName --左边补0,如 00001,00039 SELE ...
- D3.js学习(一)
从今天开始我将和大家一起学习D3.js(Data-Driven Documents),由于国内关于D3的学习资料少之又少,所以我觉得很有必要把自己学习过程记录下来,供同学们参考,如果文章有有哪些表达有 ...