黑马程序员——Java基础5 io流
来源:互联网 发布:装饰定额预算软件 编辑:程序博客网 时间:2024/06/06 04:06
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1
上篇博客记录学习到了复制的内容,接下来要说的是通过缓冲流复制,这里要介绍一下缓冲流,缓冲流的作用如下:
缓冲流的引入带来的最大的好处就是提高了文件操作的效率,因为如果没有缓冲区,应用程序每次输入(读取)输出(写入)都要和设备进行通信,效率很低,因此缓冲区为了提高效率,数据读写时在内存中为每个流对象提供一个临时缓冲区,每次读取 一个缓冲区大小的数据后再将这些数据一次性写入(输出)到目标设备,字符流底层使用字节流的缓冲区,先将字节读取到缓冲区,然后经过查字符编码表 查到字符才进一步的对字符进行操作。
假如我们要通过一个缓冲区复制一个文本文件,示例代码如下:
字符流的缓冲区:
缓冲区的出现提高了对数据的读写效率
对应类:
BufferedWriter
BufferedReader
缓冲区要结合;流才可以使用。在流的基础上对流的功能进行了增强。
2 装饰设计模式
装饰设计模式的最大作用是对原有类进行了功能的改变和增强。
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。
示例如下:
装饰设计模式更加的灵活,避免了继承体系的臃肿,降低了类与类之间的联系。装饰类因为是增强已有的对象,具备的功能和已有的是相同的,但是提供了更强的功能, 装饰类和被装饰类通常属于同一体系。
3 字节流File的读写操作
字节流的基本操作和字符流相同,但它不仅可以操作字符,还可以操作其他媒体文件,例如复制一个jpg文件。
思路:
1,用字节读取流对象和图片关联。
2,用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。
3,通过循环读写,完成数据的存储。
4,关闭资源。
转换流的由来:
字符流和字节流之间的桥梁
方便了字符流和字节流之间的操作
转换流的应用
字节流中的数据都是字符时,转成字符流操作更高效。
标准输入输出流
System类中的字段:in,out
它们各代表了系统的标准输入和输出设备。
默认输入设备是键盘,输出设备是显示器。
System.in的类型是InputStream
System.out的类型是PrintStream是OutStream的子类 FilterOutputStream的子类
1,明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2,操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台。
例如:将一个文本文件中数据存储到另一个文件中。复制文件。
源:因为是源,所以使用读取流。InputStream Reader
是不是操作文本文件。
是!这时就可以选择Reader
这样体系就明确了。
明确设备:硬盘。上一个文件。
Reader体系中可以操作文件的对象是 FileReader
是否需要提高效率:是!。加入Reader体系中缓冲区 BufferedReader.
流失用来处理数据的
处理数据时,一定要先明确数据源,与数据目的地
数据源可以是文件,也可以是键盘
数据目的地可以是文件,显示器或者其他设备
而流只是在帮助数据进行数据传输,并对传输的数据进行处理,比如过滤处理、转换处理等。
通过缓冲区复制mp3文件
BufferedOutputStream
BufferedInputStream
用来将文件或者文件夹封装成对象;方便对文件与文件夹的属性信息进行操作; File对象可以作文参数传递给流的构造函数。
字符编码
字符流的出现是为了方便操作字符,更重要的是加入了编码转换
通过子类转换流来完成:InputStreamReader/OutputStreamWriter
在两个对象进行构造的时候可以加入字符集。
常见的编码表有以下几种
ASCII:美国标准信息交换码,用一个字节的7位表示。
ISO8859-1:拉丁码表,用一个字节的8位表示
GBK:中国的中文码表,相比于GB2312,进行了升级,融合了更多的中文字符。
Unicode:国际标准码,融合了多种文字,所有的文字都用两个字节来表示。
UTF-8:最多用三个字节表示一个字符。
转换流的编码应用
可以将字符以指定编码格式存储。
可以对文本数据指定编码格式进行解读。
指定编码表的动作由构造函数完成。
字符编码
编码:字符串-->字节数组
解码:字节数组-->字符串
- 黑马程序员——Java基础5 io流
- 黑马程序员---java基础---5IO流
- 黑马程序员——Java基础---IO
- 黑马程序员——java基础--IO
- 黑马程序员——Java基础---IO
- 黑马程序员 Java基础——IO
- 黑马程序员—Java基础—IO
- 黑马程序员——java基础——IO流
- 黑马程序员——Java基础——IO流
- 黑马程序员——Java基础——IO流
- 黑马程序员——java基础——IO流
- 黑马程序员——Java基础——IO流
- 黑马程序员——JAVA基础——IO流
- 黑马程序员——java基础——IO流
- 黑马程序员——JAVA基础——IO流
- 黑马程序员——Java基础---IO流(字符流)
- 黑马程序员——Java基础---IO流(字节流)
- 黑马程序员——Java基础—IO流
- STL源码剖析 - 第4章 序列式容器 - stack
- Android 绘图(一)——绘制直线的drawnline方法
- OC-数组基本介绍和常用的方法细说!
- 写出一个你自己的MVC框架-基于对springMVC源码实现和理解(2):数据初始化(一)
- Bayes入门
- 黑马程序员——Java基础5 io流
- checkbox选中往后台传1,不选中往后台传0
- Jquery定时隐藏对话框
- Android ViewPager使用详解 .
- centos下搭建lamp的点滴
- linux awk命令详解 --awk编程
- Search in Rotated Sorted Array II
- strlen的2种实现方式以及注意事项
- Injector Job深入分析