Map的迭代方式
//使用迭代器
Iterator it = list.iterator();
//判断有没有下一个
it.hasNext();
it.Next(); -> 返回值为Object
Object o = it.next();
//
while(it.hasNext();
BufferedWriter 装饰模式
BufferedWriter{
Writer out;
Write(){
……
out.write(); 核心代码
…
}
}
实现方式
Buffered类继承Writer类,在类中添加Writer类型的成员变量,对相应方法进行重写时,调用成员变量的方法完成
示例如下
class BufferedWriter extends Writer{
Wtiter out;
Char[ ] cb = new char[8192];
public void writer(String str){
//1.先将数据写入缓冲区
cb.xxx
//2.如果cb已满,写入到out中
}
public void close(){
//1.清理cb
//2.关闭out
}
}
字符流的缓冲区
缓冲区的出现提高了对数据的读写效率
对应类:
- BufferedWriter
- BufferedReader
缓冲区要结合流才能使用
在流的基础上对流的功能进行了增强
Junit
单元测试框架
格式:@Test
无需main函数,使用interface接口
BufferedReader{
//
int read( ){
}
}
转换流
InputStreamReader,OutputStreamWriter
由来:
方便流与字节流之间的桥梁
方便了字符流与字节流之间的操作
转换流的应用
字节流中的数据都是字符时,转成字符流操作更高效
输入输出标准流
System类中的字段:in , out
它们各代表了系统标准的输入和输出设备
默认输入设备时键盘,输出设备是显示器
System.in的类型时InputStream
System.out的类型是PrintStream是OutputStream的子类FilerOutputStream的子类
标准输入输出流样例
获取键盘录入数据,然后将数据流向服务器,那么显示器就是目的地。
通过System类的setIn,setOut方法对默认设备进行改变
System.setIn(new FileInputStream(“1.txt”)); //将源改成文件1.txt
System.setOut(new PrintStream(new FileOutputStream(“2.txt”))); //将目的改成文件2.txt
因为字节流处理的是文本数据,可以转换成字符流,操作更方便
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
字节流
- 基本操作与字符流类一样
- 但他不仅可以操作字符,还可以操作媒体文件
- FileInputStream
支持skip()方法,skip向后跳的时候不能超过文件开头地址,可以超过文件尾地址 - FileOutputStream
不支持skip - RandomAccessFile
随机访问文件,定位到文件的任意位置
流的基本应用小结
- 流是用来处理数据的
- 处理数据时,一定要娴明确数据源,与数据目的地(数据汇)
- 数据源可以是文件,可以是键盘
- 数据目的地可以是文件,显示器或者其他设备
- 流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理,转换处理等