![65108cdcdf8428fa230ab51c8a6dd185.png](https://img-blog.csdnimg.cn/img_convert/65108cdcdf8428fa230ab51c8a6dd185.png)
第27次
学习主题:容器遍历以及IO流
学习目标:
1 掌握容器的遍历
2 掌握IO流的基本概念,结构,以及文件字节流
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
1. 迭代器_遍历List_Set
(1) 迭代器的由来是什么?
普通for循环的缺点就是事先必须知道集合的数据结构,而且当换了一种集合的话代码不可重用,要进行修改,例如使用set,就不能通过索引来遍历。每一种集合类对应一种访问方式,代码不可重用。为了解决该问题。Iterator模式总是用一种逻辑遍历集合。每一种集合类返回的Iterator具体类型可能不同,但它们都实现了Iterator接口,因此客户端只需要获得Iterator接口即可。
(2) 使用迭代器遍历集合的原理是什么?
通过hasNext()方法,判断集合中是否还有对象;若有对象,则通过next()方法
获得对象
2. 迭代器_遍历Map
(1) ListIterator接口比Iterator扩展的哪些方法?
1、hasPrevious()前面是否有元素对象
2、remove()删除由next()返回的元素对象
(2) 并发修改异常是如何产生的?
在使用迭代器对象遍历集合的同时使用集合对象去修改集合
3. 容器体系框架总结
(1) 画出集合体系框架图?
![120569105de90c70d70692bcb881e866.png](https://img-blog.csdnimg.cn/img_convert/120569105de90c70d70692bcb881e866.png)
(2) 集合和数组的异同点?
1、 集合和数组都是用来存储元素的容器
2、 数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。
3、 数组的存放的类型只能是一种,集合存放的类型可以不是一种(不加泛型时添加的类型是Object);
4. IO流的基本概念
(1) 简述IO流的原理?
数据通过特殊方法实现在文件和程序之间的传递
(2) Java中关于IO流的定义 ?
在Java程序中,对于数据的输入/输出操作以“流”方式进行
5. 流的细分和体系_四大抽象类
(1) IO流可以分为哪几类?
1、 根据流的方向分为:
输入流(数据源到程序 InputStream、Reader读进来)
输出流(程序到目的地 OutPutStream、Writer写出去)
2、 根据处理数据到单元:
字节流:按照字节读取数据(InputStream、OutPutStream)
字符流:按照字符读取数据(Reader、Writer)
注意:输入、输出是相对于程序而言的,进程序就是输入流,出程序就是输出流
3、 根据功能不同:
节点流:可以直接从数据源或目的地读写数据
处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的是简化操作和提高性能。
(2) 流的四大抽象类分别是什么?
![6431f786a9efb3a9899843198ab5d362.png](https://img-blog.csdnimg.cn/img_convert/6431f786a9efb3a9899843198ab5d362.png)
6. 文件字节流
(1) FileInputStream的常用方法有哪些?
1、 读取内容方法:
1) abstract int read()
2) int read(byte b[])
3) int read(byte b[],int off,int len)
4) int available()
5) close()
(2) FileOutputStream的常用方法有哪些?
1) abstract void write(int b)
2) void write(byte b[])
3)void write(byte b[],int off,int len)
4)void flush()
5)void close()
7. 使用字节流实现文件复制
(1) 简述使用字节流实现文件复制的原理?
从磁盘每读取一个字节便写入一个字节
(2) 简述使用字节流实现文件复制的步骤?
1、 创建FileInputStream对象fis初始化null
2、 创建FileOutPutStream对象fos初始化null
3、 Int b=0;用于存储读到的字节(中转站)
4、 While循环判断是否还能读到数据((b=fis.read)!=-1)
5、 把读到的数据写入文件
6、 关闭fos,关闭fis
7、 处理异常(判断fos、fis是否是null,不等于null再关闭)
第28次(IO流)
学习主题: IO流
学习目标:
1 掌握不同类型流的使用
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应文档:
无
对应作业
8. 文件字符流
(1) Reader常用的方法有哪些?
1、 int read()读一个字符
2、 int read(char[] cbuf)
3、 int read(char[] cbuf,int off,int len)
4、 int available()
5、 close()
(2) Writer常用的方法有哪些?
1、 void write(int c)
2、 void write(char[] cbuf)
3、 abstract void write(char[] cbuf,int off,int len)
4、 void write(String str)
5、 abstract void flush()
注:使用reader/writer字符流读取文件内容步骤
1) 与文件搭建桥梁,即创建FileReader/FileWriter对象
2) 读取/写入文件内容
3) 关闭流
9. 缓冲字节流_缓冲字符流
(1) 缓冲字节流的特点是什么?
BufferedInputStream和BufferedOutputStream(处理流)
不直接连接到数据源或目的地,是其他流进行封装。目的是简化操作和提高性能。
(2) 简述使用缓冲字节流进行文件复制时提高效率的原理是什么?
1、 读/写文件都使用了缓冲区,减少了读写次数。
2、 当创建这两个缓冲流的对象时,会创建内部缓冲数组,缺省使用32 字节大小的缓冲区
3、 当读取数据时,数据按快读入缓冲区,其后的读操作则直接访问缓冲区
4、 当写入数据时,首先写入缓冲区,当缓存区满时,其中的数据写入所连接的输出流。使用flush()方法可以强制将缓冲区的内容全部写入输出流
5、 关闭流的顺序和打开流的顺序相反,只需关闭高层流即可
6、 Flush的使用:手动将buffer中内容写入文件
注:缓冲字符流
1) BufferedReader:readLine()读取一个文本的数据
2) BufferedWriter:newLine()写入一个行分隔符,write()写入数据
使用缓冲字符流时复制文本文件常用的方式
10. 转换流
(1) InputStreamReader的作用是什么?
把InputStream转换成Reader
(2) OutputStreamWriter的作用是什么?
把OutputStream转换成Writer
11. 打印流
(1) 简述PrintStream的特点?
1、 PrintStream提供了一系列的print()和println()。可以实现将基本数据类型格式化成字符串输出。对象类型将先调用toString(),然后输出该方法返回的字符串
2、 System.out和System.err,是PrintStream的两个实例,代表显示器
3、 PrintStream的输出功能很强大,通常需要输出文本内容,都可以将输出流包装成PrintStream后输出
4、 PrintStream的方法都不跑出TOException
(2) 简述PrintWriter与PrintStream的区别?
PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。
PrintStream是字节流,它有处理raw byte的方法,write(int)和write(byte[],int,int);PrintWriter是字符流,它没有处理raw byte的方法。PrintStream和PrintWriter的auto flushing机制有点不同,前者在输出byte数组、调用println方法、输出换行符或者byte值10(即n)时自动调用flush方法,后者仅在调用println方法时发生auto flushing。
PrintWriter类与PrintStream类的方法是对应的,当前者的自动清空缓冲区的功能被使能时(构 造函数中autoFlush置为true),仅当println()方法被调用时才自动清缓冲区,而不是像PrintStream一样遇到一个换行符就清缓冲。
12. 数据流
(1) 数据流的作用是什么?
1、 提供了可以存储所有Java基础类型数据(int,double等)和String的方法
2、 处理流,只针对字节流,二进制文件
3、 输入流链和输出流链
4、 只要关闭上层流即可
输入输出流链:
![19af42216bb3b9ed79cd45ea7a939d87.png](https://img-blog.csdnimg.cn/img_convert/19af42216bb3b9ed79cd45ea7a939d87.png)
(2) 你学过的流中哪些是处理流?
缓冲流,转换流,数据流