[十五]javaIO之SequenceInputStream
功能简介
他拥有两个构造方法 把两个InputStream 或者一个InputStream类型的Enumeration中包含的所有的流 连接起来 |
public SequenceInputStream(Enumeration<? extends InputStream> e) |
public SequenceInputStream(InputStream s1, InputStream s2) |
实现原理
内部包含一个in 以及一个Enumeration in用来表示当前的流 Enumeration保存了所有的流 |
如果构造方法入参为Enumeration 直接内部的Enumeration指向参数 |
如果传递的是两个InputStream 创建一个Vector,将这两个流添加到Vector中 然后调用Vector的elements 获得Enumeration |
可以看得到,构造方法中都调用了nextStream这个方法 他是用来给in赋值的 如果是第一次调用,in肯定为null,所以不会进入第一行的if 会从Enumeration中读取一个流,赋值给in 如果是后来的调用,会把in指向的流进行close,然后在获取下一个流 显然,这个方法的场景就是构造方法执行之后的初始化 以及当一个流读取数组结束之后,尝试从下一个流读取 |
read()方法将会持续从in中读取数据 从一个流读取数据,如果不是-1 返回,如果是那么更新当前的in 指向下一个流 然后如果in不为null,进行读取 如果不是-1 返回,如果是那么更新当前的in 指向下一个流 ......... 直到最后一个流, in就是一个游标 |
多参数的也是类似 从流中读取数据,如果读取到了,返回n,数据写入到字节数组b中了 如果n<=0 说明 当前的in读取结束了 那么调用nextStream 然后do while循环读取 |
因为in始终指向当前的流,如果当前流为null,那么的确没有可用的 否则直接返回 in.available |
close方法更直接 从头到尾通过nextStream遍历一遍所有的流 nextStream方法会把当前的流close掉 也就完成了所有的流的关闭 |
总结
[十五]javaIO之SequenceInputStream的更多相关文章
- [二十五]JavaIO之RandomAccessFile
功能简介 我们之前一直说流顺序的,不能随机访问,的确之前说的IO体系的确如此 但是 RandomAccessFile自成一派 此类的实例支持对随机访问文件的读取和写入 我们之前介绍过DataOutpu ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- Bootstrap <基础二十五>警告(Alerts)
警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...
- Bootstrap<基础十五> 输入框组
Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...
- 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)
解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...
- 十五个常用的jquery代码段【转】
好的文章顶一个 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top 2 $('a.t ...
- 十五个常用的jquery代码段
十五个常用的jquery代码段 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top ...
- 淘宝(阿里百川)手机客户端开发日记第十五篇 JSON解析(四)
解析一个从淘宝传递的JSON (大家如有兴趣可以测试下):{ "tae_item_detail_get_response": { "data": { " ...
随机推荐
- 利用jquery-barcode.js实现生成条形码
jquery-barcode官网 js下载地址-github 代码示范(官网上也有) <!DOCTYPE html> <html> <head> <meta ...
- 微信跳转之WAP跳转微信公众号关注页面链接weixin://dl/business/?ticket=
本文整理了部分微信 URL Schemes,经过本人测试,所有url在微信 6.3.22 版本下都可正常工作.大家可以在 Safari 中打开链接进行尝试.(部分链接仅允许在微信内部浏览器中打开,已用 ...
- java保留小数-抄网上的
摘抄别人的JAVA中保留小数点后若干位数的几种方法 2009-12-17 11:46:18| 分类: 编程小发现 | 标签: |举报 |字号大中小 订阅 第一种:java.text.Decima ...
- 旧项目Makefile 迁移CMake的一种方法:include Makefile
有些c++旧项目用Makefile,要迁移CMake的时候非常痛苦,有些像static pattern的语法和make自带命令 cmake要重写一套非常的麻烦. 因此这里用trick的方法实现了一种i ...
- VUE-利用OSS BrowserJS-SDK实现阿里OSS前端上传
项目中遇到利用阿里OSS上传文件,线上很多示例用到了各种SDK,却没有看到OSS BrowserJS-SDK相关示例,鉴于脑子不好使,记一下. 封装upload相关组件  使用npm安装SDK的开发 ...
- 反调试——jmp到那个地址
目录 1.前言 2.原理讲解 3.代码实现 前言 这节的反调试是通过构造代码来干扰正常的分析.反调试参考CrypMic勒索病毒 原理讲解 在逆向分析汇编代码时,一般都是通过汇编指令call或jmp跳到 ...
- Objective-C 优秀文章分享
1. Objective-C Runtime 2.KVO + Block 3.Method Swizzling 和 AOP 实践
- Unity AssetBundle的几个加载方式
string path = @"AssetBundles/scene/cubewall.ab"; string cacheDownloadPath = @"file:// ...
- PTA第四次作业
题目 7-1 计算职工工资 1.设计思路 (1)第一步:观察题意了解各个参数与所需函数在题目中的意义: 第二步:设计算法编写函数,让函数的功能实现题目中所需的功能: 第三步:运行程序检测是否错误. ( ...
- SimpleRpc-客户端与服务端工作模型探讨
前言 本篇文章讲述客户端与服务端的具体设计细节.有细心的小伙伴发现,客户端和服务端的工作方式不一样:服务端是多线程计算模型,利用工作线程完成数据的读取,而客户端是单线程(利用Reactor线程完成数据 ...