1.写在前面

这篇文章最多只能算是一点笔记,持续更新,而且有一些细枝末节的地方可能注意不到,仅限于应用,会长期进行更新,还望大佬能指点一二

这里顺便整理一下会遇到的点:

1.关于read函数,这个函数有多个重载,这里列出两个
(1)int n=read();没有参数,一次读取一个字节or字符,返回的n要么是读出的东西,要么为-1代表读不到了
(2)int n=read(byte[] arr);会把读入的东西塞进数组里面,返回n为读出有效数字的个数
2.关于file流的第二参数
文件输出流输入节点流,第二个参数append,代表是否选择附加
如果为false,代表的是覆写

 

2.关于流的分类

不同的维度有不同的分类方法,比如分成字节流(一次传递8bit)字符流(一次传递一个字符),或者是最常见的分类方法:节点流和处理流

(1)关于节点流:

1.节点流的基础:四个基本抽象类

字节流

字符流

输入

InputStream

Reader

输出

OutputStream

Writer

这四个是抽象类,所有流都是从这四个实现的,字节流顾名思义,传递的是八个bit的子杰,字符流传递的是字符。其中字节流可以传递一切东西,而非文本文件最好不要用字符流,因为容易造成读出结果紊乱

2.节点流的实体类:

其实是四个抽象类的具体实现,都已经封装在io这个包里面了,可以完成最基础的,对于载体的读写操作

文件操作流

FileInputStream

FileOutputStream

文件操作流的具体操作载体就是文件,具体使用方法如下哦

BufferedInputStream b = new BufferedInputStream(new FileInputStream(f));
        BufferedOutputStream o=new BufferedOutputStream(new FileOutputStream("src/文件2.jpg",false));
       
        int n=b.read();
        while(n!=-1){
            o.write(n);
            n=b.read();
        }
        b.close();
        o.close();

//文件复制操作

再举一个例子,我们平时用到的system对于io的支持,实际上也是一种载体为键盘,控制台的字节输入流

System也是字节流

System.in()

System.out()

(2)关于处理流

如果说节点流的具体实现是确定了何种载体和传输格式,

处理流就是对传进来和传出去的数据形式(比如数据类型)进行调整

关于最常见的缓冲流

输入

输出

字节

BufferedInputStream

BufferedOutputStream

字符

BufferedReader

BufferedWriter

作用就是一次读取大量数据(类似缓冲数组),节约了很大的效率

还有常见的转换流,在输入的时候把字节流转化为字符流,在输出的时候把字符流转化为字节流

总之读入的时候是字节,然后内部处理的时候是个字符

转换

InputStreamReader

OutputStreamWriter

 

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

数据流,用来传递基本数据类型和字符串

数据

DataInputStream

DataOutputstream

DataOutputStream dp=new DataOutputStream(new FileOutputStream("src/测试.txt"));
        dp.writeInt(114514);
DataInputStream dp=new DataInputStream(new FileInputStream("src/测试.txt"));
        System.out.println(dp.readInt());

对象流:用来传递对象,这个接收的时候有点麻烦,可能还需要反序列化的知识在里面

对象

ObjectInputStream

ObjectOutputstream

ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream("src/测试.txt"));
        os.writeObject(new Integer(13));

 ObjectInputStream os=new ObjectInputStream(new FileInputStream("src/测试.txt"));
        System.out.println(os.readObject());