欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA学习笔记——IO流

程序员文章站 2022-04-08 22:49:15
...

概念

流是一个抽象概念,是对输入和输出设备的 抽象,在Java程序中,对于数据的输入/输出操 作都是
以“流”的方式进行,设备可以是内存,文件,网络等等。

打个比方,我们可以把流想象成一根管道,数据想象成水流,水流经过自然就形成了方向 的概念。在Java中一般以程序作为参考对象, 如果数据是从程序流向设备,那我们称之为输 出流,反之我们 称为输入流。当程序需要从某个数据源头读入数据时,就会开启一个输入流,从而读入数据,数据源头可以为文件,内存或者网络。相反,需要写出数据到某个数据源时,也会开启一个输出流这个数据源头同样以是文件, 内存或者网络等等。

流的分类

1.从需要处理的数据单位不同,可以分为两种
字符流
字节流
2.从数据流方向不同,同样可分为两种
输入流
输出流
3.功能不同,也能分为两种
节点流
处理流

节点流

节点流可以从一个特定的数据源读写数据,即节点流是直接操作文件,网络的流,
比如
FileInputStream和FileOutputStream
他们直接从文件中读取或往文件中写入字节流。

处理流

处理流可以为节点流提扩展更多更强大的功能,可以理解为是对节点流的包装。

BufferedInputStream
BufferedOutputStream
他们使用已经存在的节点流来构造,提供带缓
冲的读写提高了读写的效率。

流的结构

Java所有的流类位于java.io包中,都分别继承字以下四种抽象流类型。

字节流 字符流
输入流 InputStream Reader
输出流 OutputStream OutputStream

字节流

继承自InputStream/OutputStream的流都是用于向程序中输入/输出数据,且数据的单位都是字节(1byte=8bit)
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
EOF = End 读到-1就读到结尾
输入流基本方法

//读取一个字节无符号填充到int低八位,-1是EOF
int a = in.read();
//读取数据填充到字节数组b
in.read(byte[] b);
//读取数据到字节数组buf,从buf的start位置开始,存放size长度的数据
in.read(byte[] b, int start, int size);

输出流基本方法

//写出一个byte到流,b的低8位
out.write(int b)
//将b字节数组写入到流
out.write(byte[] b)
//字节数组b从start位置开始写size长度的字节到流
out.write(byte[] b, int start, int size)

FileInputStream 具体实现了在文件上读取数据
FileOutputStream 实现了想文件中写出byte数据的方法
DataOutputStream/DataInputStream

相关标签: