流是指数据的流动,在计算机中每时每刻都有大量的数据需要处理,外部硬盘数据的读写,网络的请求和响应都是数据在流动的体现,流的本质就是数据传输,根据数据的流向,数据流向中央处理器的叫“输入流”,反之称为”输出流“,I/O指的就是输入(input)和输出(output)
在Java语言中,对I/O流封装成了对象,流根据数据类型不同分为了两大分类:字节流 和字符流,每个分类下面再细分为输入和输出流
1.字节流
字节流以字节(8bit)为单位,读到一个字节返回一个字节,包含两个抽象类InputStream(输入流)和OutputStream(输出流)
InputStream类提供了一组read方法,负责将文件的读取
//这个方法返回一个字节的数据,但是用int装着,当返回-1是表示读取完毕
public abstract int read() throws IOException;//这个方法会填充一组字节数据到入参的字节数组,当返回-1是表示读取完毕,off表示从那个位置填充,len表示填充多少个字符
public int read(byte b[], int off, int len) throws IOException//这个方法调用了前一个方法,默认从0位置填充,填满整个数组长度
public int read(byte b[]) throws IOException2.字符流
字符是以字符为单位,字符的大小根据编码集相关,不同的编码集所占的长度不一样,字符流与字节流差异在于,字符流要经过字符编码将字节翻译成字符再返回数据,适用于文本类型的数据,例如txt,xml,json,包含两个抽象类Reader,Writer
字节流是万能流可以处理所有数据,如果涉及编码的文本数据则需要手动处理字符转义问题,所以文本处理推荐用字符流
评论区