一、缓冲流

功能流:加强节点流的功能,提高节点流的性能 必须包裹节点流进行使用

缓冲流:加快读写效率 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);
        }
    }
}