一、缓冲流
功能流:加强节点流的功能,提高节点流的性能 必须包裹节点流进行使用
缓冲流:加快读写效率 Buffered
字节缓冲流:
字节输入缓冲流BufferedInputStream : 缓冲字节输入节点流
字节输出缓冲流BufferedOutputStream : 缓冲字节输出节点流
以上两个类型没有新增方法,可以发生多态
InputStream is = new BufferedInputStream(new FileInputStream(src));
OutputStream os = new BufferedOutputStream(new FileOutputStream(dest));
字符缓冲流 : 提高字符流节点流读写效率
字符输入缓冲流BufferedReader : 缓冲字符输入节点流
新增方法 : String readLine() 读取一行文本。
字符输出缓冲流BufferedWriter : 缓冲字符输出节点流
新增方法 : void newLine() 写入行分隔符
BufferedReader rd = new BufferedReader(new FileReader(src));
BufferedWriter rt = new BufferedWriter(new FileWriter(dest));
String msg = null; //记录每次读取到的一行文本
while((msg = rd.readLine())!=null){
rt.write(msg);
rt.newLine();
二、数据流
Data流:数据流|基本数据类型流 能够让节点流在读写数据的同时写其数据类型(基本数据类型|String) 是字节流的功能流
DataInputStream : 修饰字节输入节点流
新增方法 : xxx readXxx() 读取对应类型的数据返回
DataOutputStream : 修饰字节输出节点流
新增方法 : void writeXxx(xxx) 写出XXX类型的数据
注意 : 读入与写出的顺序需要保持一致
java.io.EOFException 当通过数据输入流读取时候,类型不匹配,或者不是读入源文件都有能遇到的异常
//2.准备数据
byte b = 101;
boolean flag = false;
char ch = 'a';
String str = "abc";
//3.写出
os.writeByte(b);
os.writeBoolean(flag);
os.writeChar(ch);
os.writeUTF(str);
//2.读取
byte b = is.readByte();
boolean bb = is.readBoolean();
char ch = is.readChar();
String s = is.readUTF();
三、对象流
对象流 : Object 读写对象数据 字节流的功能流
序列化 : 将对象转为可存储或者可传输的状态的过程
序列化输出流 : ObjectOutputStream
新增方法 : final void writeObject(Object obj) 将指定对象写ObjectOutputStream。
反序列化输入流 : ObjectInputStream
新增方法 : final Object readObject() 从 ObjectInputStream 中读取一个对象。
注意 : 需要先序列化后反序列化
不是所有类型的对象都能序列化 java.io.Serializable
public static void objRead(String path) throws IOException, ClassNotFoundException {
ObjectInputStream is=new ObjectInputStream(new FileInputStream(path));
//读取
int[] arr=(int[]) is.readObject();
Person p=(Person) is.readObject();
//使用
System.out.println(Arrays.toString(arr));
System.out.println(p);
//关闭
is.close();
}
public static void writeObj(String path) throws IOException {
//创建流,建立联系
ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream(path));
//准备数据
int[] arr={1,2,3,4,5};
Person p=new Person(1001,"sdf",16);
//写入
os.writeObject(arr);
os.writeObject(p);
//输出
os.flush();
//关闭
os.close();
}
四、数组与集合的区别
数组与集合的区别 :
共同点 : 存储多个数据
异同点 : 数组 : 引用数据类型,对象数据
定长的,长度一旦确定不可改变
存储的所有数据要求类型相同
有序的,可以根据索引进行操作的
可以存储多个重复数据
集合 | 容器 :
引用数据类型,对象数据
长度可以根据需求对数据进行操作而动态更新
集合中可以存储不同类型的数据,必须为引用数据类型
有些集合类型是有序的,有些集合类型是无序的
有些集合类型可以存储重复数据,有些集合类型不能存储重复数据(去重)
五、集合Collection
Collection : 集合层次结构中的根接口。
一个集合表示一组对象,称为它的元素
一些集合允许重复元素,而另一些则不允许 有些是有序的,有些是无序的
遍历:1、foreach
2、iterator迭代器
public class Class002_Each {
public static void main(String[] args) {
Collection col = new ArrayList();
col.add(123);
col.add(456);
col.add(789);
col.add(111);
//foreach
for(Object obj:col){
System.out.println(obj);
}
//iterator
//1)获取迭代器实例
Iterator it = col.iterator();
//2)重复判断是否存在下一个元素
while(it.hasNext()){
//3)获取下一个元素
Object obj = it.next();
System.out.println(obj);
}
}
}