[五] JavaIO之InputStream OutputStream简介 方法列表说明

InputStream 和 OutputStream 对于字节流的输入和输出
是作为协议的存在
所以有必要了解下这两个类提供出来的基本约定
这两个类是抽象类,而且基本上没什么实现,都是依赖于子类具体的去实现
但是他是对于其子类 协议纲领一般的存在
了解清楚每一个方法含义,对于后续具体的子类将会有非常大的帮助

基本含义

InputStream 所有字节输入流的 超类 他是一个抽象类
OutputStream 所有字节输出流的 超类 他是一个抽象类

方法列表

image_5b95f27e_7902
InputStream  包含了读取方法以及辅助方法
OutputStream包含了写入方法以及辅助方法

方法对照

read()
read(byte[])
read(byte[], int, int)
write(byte[])
write(byte[], int, int)
write(int)
close close
 flush()
available()
mark(int)
markSupported()
reset()
skip(long)

方法详解

read
read()  从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值
如果因为已经到达流末尾而没有可用的字节,则返回值 -1
方法将会一直阻塞,直到数据可用,检测到流的末尾或者抛出异常
无参数的read() 是抽象方法,由实现类提供实现
三个read方法实际上根本方法都是read()方法
其他两个方法为拓展功能,逻辑便捷方法
无参数的read()返回的数据为读取到的字节值
而有参数的则是读取到字节数组中,所以返回值为读取到的个数
read方法关键点
要么就是直接返回读取的字节
要么就是将读取到的字节放入字节数组中,字节数组是你传递进去的
image_5b95f27f_7672
write
write(int b)
将指定的字节写入此输出流
write 的常规协定是:向输出流写入一个字节, 要写入的字节是参数 b 的八个低位   b 的 24 个高位将被忽略
说白了就是写入的是byte虽然参数是int
write(byte[] b)
将 b.length 个字节从指定的 byte 数组写入此输出流
write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同
write(byte[] b,int off,int len)
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
write(b, off, len) 的常规协定是:将数组 b 中的某些字节按顺序写入输出流;
元素 b[off] 是此操作写入的第一个字节,b[off+len-1] 是此操作写入的最后一个字节
类似read的调用形式
直接写入指定字节的write(int b)  方法是根本
其他的是拓展功能
image_5b95f27f_28a4
read()  与write(int b) 是根本的读取一个字节或者写入一个字节的方法
其余形式是针对传入字节数组作为参数,以及指定字节数组的偏移量时的一些拓展功能
一旦传递了字节数组作为参数
read将会读取数据到字节数组
write将会将字节数组的数据写入
close
都需要关闭流,所以都有close方法
都是关闭流并释放与此流有关的系统资源
都可能抛出IOException
在InputStream和OutputStream中,两个close方法都是空方法

flush
flush的含义为刷新,在写入数据时使用
所以,只有输出流拥有flush方法
之所以需要刷新,是因为有的输出流的写方法实现,可能已经缓冲了以前写入的任何字节
那么,这个方法用于提供能够立即将数据写入到磁盘的功能
不过,只是立即请求操作系统进行处理,而不保证这些字节实际已经写入到物理设备,比如磁盘
下面几个为InputStream独有
public int available()  throws IOException  
返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数
这句话有些绕口,直白的说就是:
在方法调用前,可以获取到这个流中可用的字节数目
假设说有N个字节可以使用,显然你应该很可能读取到N个字节,或者能够跳过N个字节
一次读取或跳过此估计数个字节不会受阻塞
注意:
这个数目是一个预估的数量
实际的读取或者跳过的字节数可能小于这个数
InputStream中的这个方法总是返回0 
所以这个方法能否使用依赖于子类的实现

image_5b95f27f_373b
public long skip(long n) throws IOException
返回的是实际跳过的字节数
在内部创建一个 byte 数组,然后重复将字节读入其中,直到读够 n 个字节或已到达流末尾为止
image_5b95f27f_6cd7
reset()
mark(int)
markSupported() 
三个方法是对于同一个功能点的不同方法  ,可以解决重复读的问题
mark(int)用来在此输入流中做标记,标记当前位置  打一个书签
markSupported()   测试此输入流是否支持 mark 和 reset 方法
reset()  将此流重新定位到最后一次对此输入流调用 mark 方法时的位置   回到书签
看下类中的默认代码可以发现:
默认情况下mark什么都不做
markSupported直接返回false
reset方法的调用会抛出异常
image_5b95f27f_26c1
mark的参数用于告知输入流在标记位置失效之前允许读取的字节数
标记已关闭的流对其无效
说起来很迷惑,用起来却很简单
比如
xxxStream.mark(50);//表明系统至少应该缓冲50以上个数据,以保证可以回来重新读取
xxxStream.read();
.....
xxxStream.read();

xxxStream.reset();//reset之后,读取到的数据将会和刚才调用mark 方法后read的数据是相同的
xxxStream.read();
.....
xxxStream.read();
如果方法 markSupported 返回 true,那么输入流总是在调用 mark 之后记录所有读取的字节
并时刻准备在调用方法 reset 时(无论何时),再次提供这些相同的字节
但是,如果在调用 reset 之前可以从流中读取多于 readlimit 的字节,则不需要该流记录任何数据

转载于:https://www.cnblogs.com/noteless/p/9618521.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql yum 安装后,一些重要的文件路径

默认配置文件路径: 配置文件:/etc/my.cnf 日志文件:/var/log//var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid #(a)数据库目录 /var/lib/mysql…

mysql双机热备 配置文件,MYSQL 双机热备配置手册()

[原创] MYSQL 双机热备配置手册[原创]http://www.chinaunix.net 作者:squall1 发表于:2007-07-23 19:01:43【发表评论】【查看原文】【存储备份之家讨论区】【关闭】作者:CU-squall发表于:2005年4月18日 8:21 可以不经作者同意自由传播&…

[转]资本经营董事长班告诉你:不只企业有商业模式,个人商业价值更重要

本文转自:http://blog.sina.com.cn/s/blog_181b5b47e0102xz4v.html 东方财智-资本经营董事长班>>> 经营者如何轻松驾驭金融工具为企业发展加速、升级互联网工具实现品牌营销裂变、利用管理工具优化公司内部结构,把握前沿视角,实现快…

CentOS 7添加开机启动服务脚本

原文路径:https://blog.csdn.net/wang123459/article/details/79063703 --------------------------------------------------------- 一、添加开机自启服务 在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): system…

php 彩票系统,hsyl12141511 一套完整的PHP版彩票系统 - 下载 - 搜珍网

文件名大小更新时间BOEKJ02017-12-14BOEKJ\.idea02017-12-13BOEKJ\.idea\BOEKJ.iml2812017-04-28BOEKJ\.idea\modules.xml2622017-04-28BOEKJ\.idea\workspace.xml100272017-04-28BOEKJ\String-ext.js10402015-05-30BOEKJ\TianHeng.exe230402015-05-05BOEKJ\config.js309232017…

CPR认证-建材CE认证-305/2011/EU

建材CPR认证 - Regulation (EU) No 305/2011  2011年3月,欧盟颁布了新建筑产品法规RETULATION (EU) No 305/2011 – CPR,并通告了新法规于2013年7月进入强制执行,取代了老CPD指令89/106/EEC。  新的建材CPR认证也是…

python支持复数类型以下什么说法是错误的,【Python】专项练习题(1)

1.python代码如下:foo [1,2]foo1 foofoo.append(3)A.foo 值为[1,2]B.foo 值为[1,2,3]C.foo1 值为[1,2]D.foo1 值为[1,2,3]答案:B D链接:https://www.nowcoder.com/profile/153165401/myFollowings/detail/20055659来源:牛客网2.下列程序打印…

ios10不能定位 window.navigator.geolocation.getCurrentPosition(定位第一节)

原文连接: https://blog.csdn.net/michael_ouyang/article/details/54137709 --------------------------------------------------------- 问题分析: 目前由于许多苹果用户都升级到了iOS系统,苹果的iOS 10已经正式对外推送,…

php网站无法显示,php – 在UTF-8网站上无法正确显示的字符

我已经完成了我能想到的一切,但是在这个网页上没有正确显示特殊字符.例如,在数据库中它是:但在网站上它是:Nouveaux R�alistes这是我检查过的一切……数据库设置为UTF-8:该页面是用NetBeans编写的,文档编码设置为UTF-8&#xff1a…

ios如何获取gps坐标(定位第二节)

原文连接: https://blog.csdn.net/michael_ouyang/article/details/54378338 -------------------------------------------------------------------- 在上一篇文章,解决ios 10不能定位的问题,把navigator.geolocation.getCurrentPosition…

java并发编程——线程池的工作原理与源码解读

2019独角兽企业重金招聘Python工程师标准>>> 线程池的简单介绍 基于多核CPU的发展,使得多线程开发日趋流行。然而线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就引入了线程池技术,避免频繁的线…

php pcre回溯攻击,php preg_match pcre回溯绕过

原理需要知识:正则NFA回溯原理,php的pcre.backtrack_limit设置。正则NFA回溯原理正则表达式是一个可以被"有限状态自动机"接受的语言类。"有限状态自动机",拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移…

电驴更新地址

emule是通过ED2K网络和KAD网络寻找、连接其他emule客户端的,所以服务器列表和KAD节点文件是emule的必需文件。 有些新手由于下载官方原版emule压缩包或其他未集成这些必需文件的emule压缩包,从而出现“连接不上ED2K与KAD”问题。所以学会下载更新服务器…

Vue CLI 3 可以使用 TypeScript 生成新工程

TypeScript 支持 在 Vue 2.5.0 中,我们大大改进了类型声明以更好地使用默认的基于对象的 API。同时此版本也引入了一些其它变化,需要开发者作出相应的升级。阅读博客文章了解更多详情。 发布为 NPM 包的官方声明文件 静态类型系统能帮助你有效防止许多潜…

手机端本地图片或者拍照的上传功能

原文连接 https://blog.csdn.net/m0_37852904/article/details/78550136 ---------------------------------------------------------- 最近刚好在做手机端的图片上传功能&#xff0c;便记录下 html&#xff1a; <input type"file" class"hide" i…

php scandir sftp,CentOS 下使用SFTP实现网站自动生成FTP账号,实现Chroot功能

背景 手上有一个这样的系统&#xff1a;后台可以直接新建项目(网站)&#xff0c;只需输入项目名称、访问域名(二级)以及其他一些额外信息&#xff0c;就可自动生成一个模板网站。大致原理是&#xff1a;提交这些信息的时候&#xff0c;后台会给项目新建一个目录&#xff0c;并把…

IOS内购详解

介绍 最近开发的一款APP上架被驳回了&#xff0c;理由是&#xff1a; 上架的APP是培训类&#xff0c;里面金牌视频课程需要购买&#xff0c;Android端使用支付宝&#xff0c;微信支付。 苹果规定 数字化内容、App功能以及服务等&#xff0c;需要使用内购 真实世界中的服务(…

汇编中的函数调用与递归

栈帧的结构 倘若我们要想搞清楚过程的实现&#xff0c;就必须先知道栈帧的结构是如何构成的。栈帧其实可以认为是程序栈的一段&#xff0c;而程序栈又是存储器的一段&#xff0c;因此栈帧说到底还是存储器的一段。那么既然是一段&#xff0c;肯定有两个端点&#xff0c;这个不需…

php 相亲 段子,精彩的男女幽默段子

精彩的男女幽默段子。撒嬌老婆洗完澡對老公撒嬌說&#xff1a;老公&#xff0c;抱我到床上去吧。老公看了看老婆&#xff0c;冷冷的回答道&#xff1a;我還是把床搬過來吧&#xff01;所以&#xff0c;撒嬌還是要看體型&#xff01;單身老公說&#xff1a;老婆&#xff0c;你不…