黑马程序员-javase-io(1)
来源:互联网 发布:缓存数据库 编辑:程序博客网 时间:2024/05/21 22:42
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
IO流
一、概述
1、流的概念和作用:流失一组由顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输为流
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
2、IO:即InputOutput的缩写。
3、特点:
1)IO流用来处理设备间的数据传输。
2)Java对数据的操作是通过流的方式。
3)Java用于操作流的对象都在IO包中。
4)流按操作数据分为两种:字节流和字符流。
5)流按流向分为:输入流和输出流。
注意:流只能操作数据,而不能操作文件。
4、IO流的常用基类:
1)字节流的抽象基流:InputStream和OutputStream
2)字符流的抽象基流:Reader和Writer
注:此四个类派生出来的子类名称都是以父类名作为子类名的后缀,以前缀为其功能;如InputStream子类FileInputStream;Reader子类FileReader
如下图
二、 字符流简述
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字 节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
三、字符流缓冲区
1)、 缓冲区的出现提高了对数据的读写效率,所以在创建缓冲区之前,必须要有流对象。
2)、对应类 BufferedWriter BufferedReader
3)、缓冲区要结合流才可以使用。
4)、在流的基础上对流的功能进行了增强。
5)、 该缓冲区提供了一个跨平台的换行符。 newLine();其实关闭缓冲区,就是在关闭缓冲区中的流对象。
bufw.close();
6)、字符串取流缓冲区:
该缓冲区提供了一个一次读一行的方法,readLine,方便与文本数据的获取。当返回null时,表示读到文件末尾。
readLine 方法返回的时候只返回回车符之前的数据内容,并不返回回车符
readLine 方法的原理无论是读一行,获取读取多个字符,其实最终都是在硬盘上以一个读取。所以最终使用的还 是read方法,一次读一个方法。
7)、实例:复制纯文本文件
public class CopyDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubBufferedWriter bw = null;BufferedReader br = null;try {bw = new BufferedWriter(new FileWriter("E:\\a.txt"));br = new BufferedReader(new FileReader("D:\\a.txt"));String msg = null;//用缓冲的话不需要刷新流while((msg = br.readLine())!=null){bw.write(msg);bw.newLine();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }
四、字节流
1)、InputStream OutputStram
需求,想要操作图片数据。这时需要用到字节流
2)、如果直接使用字节流,没有指定使用缓冲区的话,是不用刷新的。
流操作的基本规律:Buffered****.read() 都是从内存中取数据,
FileReader.read(); 从硬盘上取数据
3)、读取键盘录入。
System.out:对应的是标准输出设备,控制台。
System.in:对应的是标准输入设备,键盘
Ctrl+z 往里面加结束标志或Ctrl+c
4)、获取键盘录入对象:
将字节流对象转成字符流对象,使用转换流InputStreamReader
为了提高效率,将字符串进行缓冲区技术高效操作,使用BufferedReader;
字符流底层用的也是字节流那个缓冲区
5)、键盘最常见写法
BufferedReader a =new BufferedReader(new InputStreamReader(System.in));
将字符流对象对象转成字节流
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的charset 将要写入流中的字符编码成字节
BufferedWrite bufw = new BufferedWrite(newOutputStreamWriter(System.out));
6)、 Propertise a =System.getPropertise();获取系统属性。
7)、实例:复制图片
public class CopyDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubFileInputStream fis = null;FileOutputStream fos = null;/* * 如果图像大小大于一次数组的容纳量,那么就不是完整的复制,所以需要从源文件中不断的把数据取到数组中,直到len为-1 */try {fis = new FileInputStream("e:\\a.jpg");fos = new FileOutputStream("d:\\a.jpg");byte[] arr = new byte[1024];int len = 0 ;while((len = fis.read(arr))!=-1){fos.write(arr, 0, len);fos.flush();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
五、什么时候该用字节流,什么时候用字符流
1 明确源和目的。
源:输入流 InputSteam Reader
目的 :输出流 OutputStream Writer
2 操作的数据是否纯文本
是:字符流
不是:字节流
3 当体系明确后,在明确要使用哪个具体对象。
通过设备来区分。
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台。
记住,转化流什么时候用,字符与字节之间的桥梁,通常,涉及到字符编码转化时,
需要用到转化流
- 黑马程序员-javase-io(1)
- 黑马程序员-javase-io(2)
- 黑马程序员-javase-io(3)
- 黑马程序员----【javaSE基础】IO--字节流
- 黑马程序员----【javaSE基础】IO--字符流
- 黑马程序员-javaSE学习之IO流
- 黑马程序员-JAVASE入门( IO流 )
- 黑马程序员 JavaSE-11 IO流
- 黑马程序员—javaSE—IO流
- 黑马程序员----JAVASE之IO流操作【认知篇】
- 黑马程序员----JAVASE之IO流操作【字符流】
- 黑马程序员----JAVASE之IO流操作【字节流】
- 黑马程序员——JAVASE-IO流(上)
- 黑马程序员——JAVASE-IO流(下)
- 黑马程序员——JavaSE之IO流二
- 黑马程序员--IO(1)
- 黑马程序员--javase 多态
- 黑马程序员-javase-反射
- 蒅虿膁莂薇袅肇莁蚀蚇羃莀
- eclipse中导入项目,提示找不到No projects found import
- UVA - 1583 Digit Generator
- 网络编码(Network Encoding)与多径路由(Multi-path routing)
- H264--1--编码原理以及I帧B帧P帧
- 黑马程序员-javase-io(1)
- meteor安装Android运行环境的一系列问题
- Struts2的安装与配置
- C/C++ 中错误与异常的区别 【汇总】
- Poj 2187 Beauty Contest (凸包+旋转卡壳)
- 下拉列表
- 全面理解Unity加载和内存管理
- golang simplejson 使用笔记
- 节薇蚃袈芈蚆羅袁莃蒂袅膆