Java--IO流之字节流介绍--InputStream和OutputStream

什么是流?

 大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在java中将这种通过不同输入输出设备之间的数据传输抽象表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。

java中的流的位于java.io包中,称为IO(输入输出)流。

 

IO流有很多种,按照操作数据的不同,可以分为字节流和字符流

                         按照数据传输方向的不同,又可分为输入流和输出流

                         程序从 输入流 读取数据,向 输出流写入数据

在IO包中,字节流 的输入输出流分别用 InputStream和OutputStream 表示,

                  字符流 的输入输出流分别用 Reader和Writer表示

 

具体分类如下:     (IO流分类  

             Java--IO流之字节流介绍--InputStream和OutputStream_第1张图片



字节流的概念:  在计算机中,无论是文本图片音频还是视频,所有的文件都是以二进制(字节)形式存在,IO流中针对字节的输入输出提供了一系列的流,统称为字节流。

字节流是程序中最常用的流,根据数据的传输方向可将其分为字节输入流和字节输出流。

在JDK中提供了两个抽象类,InputStream和OutputStream,他们是字节流的顶级父类,

所有的字节输入流继承自InputStream

所有的字节输出流,都继承自OutputStream

为了方便理解,可以把InputStream和OutputStream比成两根水管:

                  Java--IO流之字节流介绍--InputStream和OutputStream_第2张图片


      上图中,InputStream被看成一个输入管道,OutputStream 被看成一个输出管道,数据通过 InputStream 从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。

程序从 输入流 读取数据,向 输出流写入数据

JDK中,InputStream 和 OutputStream 提供了一系列与读写数据相关的方法,接下来先了解一下InputStream 的常用方法


方法声明
功能描述

int read()

从输入流读取一个8位的字节,把它转换0~255之间的整数,并返回这一整数


int read(byte[ ] b)


从输入流读取若干字节,把它们保存到参数b指定的字节数组中,
返回的整数表示读取字节数

int read(byte[ ] b,int off,int len)

从输入流读取若干字节,把它们保存到参数b指定的字节数组中,

off指定字节数组开始保存数据的起始下标,

len表示读取的字节数目

void close()

关闭此输入流并释放与该流关联的所有系统资源


列举了InputStream的四个常用方法。

前三个read()方法都是用来读数据的,其中的第一个raed()方法是从输入流中逐个读入字节,而第二个和第三个raed()方法则将若干字节以字节数组的形式一次性读入,从而提高读取读数据的效率。

在进行IO操作时,当前IO流会占用一定的内存,由于系统资源宝贵,因此在IO操作结束后,应当调用close()方法关闭流,从而释放当前IO流所占的系统资源。


与InputStream对应的是OutputStream。OutStream是用于写数据的,因此OutputStream提供了一些与写数据有关的方法:

OutputStream的常用方法


方法声明 功能描述
void write(int b) 向输出流写入一个字节
void write(byte[ ] b) 把参数b指定的字节数组的所有字节写到输出流
void write(byte[ ] b,int off,int len) 将指定的byte数组中从偏移量off开始的len个字节写入输出流

void flush()

刷新此输出流并强制写出所有缓冲的输出字节

void close() 关闭此输出流并释放与该流关联的所有系统资源


前三个是重载的 write() 方法,都是用来向输出流写入字节

其中,第一个方法逐个写入字节,后两个方法则是将若干字节以字节数组的形式一次性写入,从而提高写数据的效率。

flush() 方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。

close() 方法是用来关闭流并释放与当前IO流相关的系统资源。

 

InputStream和OutputStream这两个类虽然提供了一系列和读写数据有关的方法,但是这两个类是抽象类,不能被实例化。

因此针对不同的功能,InputStream和OutputStream提供了不同的子类,这些之类就形成了一个体系结构。

如下图:

InputStream:

Java--IO流之字节流介绍--InputStream和OutputStream_第3张图片

OutputStream:

Java--IO流之字节流介绍--InputStream和OutputStream_第4张图片


如上,在操作文件时经常用到的是 FileInputStream 和 FileOutputStream。


参考: http://blog.csdn.net/asheandwine/article/details/78105769


你可能感兴趣的:(JAVA)