admin 管理员组文章数量: 887031
2024年1月10日发(作者:socket brasil)
在计算机中,无论文本、图片、音频还,所有文件都以二进制(字节)形式存在的,I/O流中针对字节的输入/输出了一系列的流,统称为字节流。字节流程序中最常用的流,根据数据的传输方向可将其分为字节输入流和字节输出流。在JDK中,了两个抽象类InputStream和OutputStream,它们字节流的父类,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。为了方便理解,可以把InputStream和OutputStream比作两根“水管”,如图1所示。
图1InputStream和OutputStream
图1中,InputStream被看成一个输入管道,OutputStream被看成一个输出管道,数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。由此可见,I/O流中的输入/输出都相对于程序而言的。
在JDK中,InputStream和OutputStream了一系列与读写数据相关的方法,接下来先来了解一下InputStream的常用方法,如表1所示。
表1InputStream的常用方法
方法声明
intread()
功能描述
从输入流读取一个8位的字节,把它转换为0~255之间的整数,并返回这一整数。当没有可用字节时,将返回-1
从输入流读取若干字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取字节的数目
从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组始保存数据的起始下标,len表示读取的字节数目
关闭此输入流并释放与该流关联的所有系统资源
intread(byte[]b)
intread(byte[]b,intoff,intlen)
voidclose()
表7-1中列举了InputStream的四个常用方法。前三个read()方法都用来读数据的,其中,个read()方法从输入流中逐个读入字节,而第二个和第三个read()方法则将 1
若干字节以字节数组的形式一次性读入,从而提高读数据的效率。在进行I/O流操作时,当前I/O流会占用一定的内存,由于系统资源宝贵,因此,在I/O操作结束后,应该调用close()方法关闭流,从而释放当前I/O流所占的系统资源。
与InputStream对应的OutputStream。OutputStream用于写数据的,因此OutputStream了一些与写数据有关的方法,如表2所示。
表2OutputStream的常用方法
方法声明
voidwrite(intb)
voidwrite(byte[]b)
功能描述
向输出流写入一个字节
把参数b指定的字节数组的所有字节写到输出流
voidwrite(byte[]b,intoff,intlen)
将指定byte数组中从偏移量off始的len个字节写入输出流
voidflush()
voidclose()
刷新此输出流并强制写出所有缓冲的输出字节
关闭此输出流并释放与此流相关的所有系统资源
表2中,列举了OutputStream类的五个常用方法。前三个重载的write()方法,都用于向输出流写入字节,其中,个方法逐个写入字节,后两个方法将若干个字节以字节数组的形式一次性写入,从而提高写数据的效率。flush()方法用来将当前输出流缓冲区(通常字节数组)中的数据强制写入目标设备,此过程称为刷新。close()方法用来关闭流并释放与当前IO流相关的系统资源。
InputStream和OutputStream这两个类虽然了一系列和读写数据有关的方法,但这两个类抽象类,不能被实例化,因此,针对不同的功能,InputStream和OutputStream了不同的子类,这些子类形成了一个体系结构,如图2和图3所示。
图2InputStream的子类
2
图3OutputStream的子类
从图2和图3中可以看出,InputStream和OutputStream的子类有很多致对应的,比如,ByteArrayInputStream和ByteArrayOutputStream、FileInputStream和FileOutputStream等。图中所列出的I/O流都程序中很常见的,接下来将为读者讲解发时常用流的具体用法。
3
版权声明:本文标题:什么是字节流?字节流输入输出数据的常用方法有哪些? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1704831615h463504.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论