IO(三)----序列流
SequenceInputStream
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
常用方法:
1、构造方法
SequenceInputStream(InputStream s1, InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream
(将按顺序读取这两个参数,先读取 s1
,然后读取 s2
),以提供从此 SequenceInputStream
读取的字节。
SequenceInputStream(Enumeration<? extends InputStream> e)
通过记住参数来初始化新创建的 SequenceInputStream
,该参数必须是生成运行时类型为 InputStream
对象的 Enumeration
型参数。
2、读取方法
int read(byte[] b, int off, int len)
将最多 len
个数据字节从此输入流读入 byte 数组。
int read()
从此输入流中读取下一个数据字节。
3、关闭资源
void close()
关闭此输入流并释放与此流关联的所有系统资源。
常用操作就是合并读取
示例代码:
// 需求: 把一首mp3先切割成n份,然后再把这些文件合并起来。
public class DemoSequenceInputStream { public static void main(String[] args) throws IOException {
// split();
merage();
} //分隔
public static void split() throws IOException{
File inFile = new File("D:\\西单女孩-原点 (3D武侠动画《画江湖之不良人》主题曲).mp3");
FileInputStream fileInputStream = new FileInputStream(inFile);
byte[] buf = new byte[1024*1024];
int length = 0;
for(int i = 0; (length = fileInputStream.read(buf)) != -1;i++){
File outFile = new File("D:\\SplitMusic\\","part"+i+".mp3");
FileOutputStream fileOutputStream = new FileOutputStream(outFile);
fileOutputStream.write(buf, 0, length);
fileOutputStream.close();
}
fileInputStream.close();
} //合并
public static void merage() throws IOException{
File dir = new File("D:\\SplitMusic");
File[] files = dir.listFiles();
//对数据进行排序
Arrays.sort(files);
Vector<FileInputStream> vector = new Vector<>();
for (File file : files) {
if (file.getName().endsWith(".mp3")) {
FileInputStream fileInputStream = new FileInputStream(file);
vector.add(fileInputStream);
}
}
Enumeration<FileInputStream> enumeration = vector.elements();
SequenceInputStream sequenceInputStream = new SequenceInputStream(enumeration);
FileOutputStream fileOutputStream = new FileOutputStream("D:\\合并.mp3");
int length = 0;
byte[] buf= new byte[1024*1024];
while((length = sequenceInputStream.read(buf)) != -1){
fileOutputStream.write(buf, 0, length);
}
fileOutputStream.close();
sequenceInputStream.close();
}
}
IO(三)----序列流的更多相关文章
- java IO之 序列流 集合对象Properties 打印流 流对象
序列流 也称为合并流. SequenceInputStream 序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 第一个输入 ...
- IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream
一.文件的遍历 1.需求:对指定目录进行所有的内容的列出(包含子目录的内容)-文件的深度遍历 思想:递归的思想,在递归的时候要记住递归的层次. public class FileTest { publ ...
- Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)
一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...
- Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)
第一讲 File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...
- IO流_SequenceInputStream(序列流)
SequenceInputStream(序列流):就是将多个流合成一个有序的流 需求:将三个文件中的数据合并到一个文件中 import java.io.FileInputStream; import ...
- java基础48 IO流技术(序列流)
本文知识点目录: 1.SequenceInputStream序列流的步骤 2.实例 3.附录(音乐的切割与合并) 1.SequenceInputStream序列流的步骤 1.找到目标文件 ...
- IO流(SequenceInputStream序列流--文件拆分与合并)
一.文件拆分 1.将一个文件按照规定的大小进行分割成多个文件并将被分割详细信息保存至配置信息中 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载,属性列表 ...
- JAVA学习第五十四课 — IO流(八)打印流 & 序列流
一.综合练习-文件清单列表 获取指定文件夹下,指定扩展名的文件(含子文件夹),并将这些文件的绝对路径写到一个文本文件里.也就是建立一个指定扩展名的文件列表 1.深度遍历 2.过滤器->容器 3. ...
- (20)IO流之SequenceInputStream 序列流
序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直 ...
- 021.11 IO流 序列流
序列流:SequenceInputStream特点:流对象有序排列解决问题:将多个输入流合并成一个输入流,将多个源合并成一个源,对于多个源的操作会变简单. 构造函数参数就是输入流,一初始化就合并了多个 ...
随机推荐
- 转:Java Web应用中调优线程池的重要性
不论你是否关注,Java Web应用都或多或少的使用了线程池来处理请求.线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的.本文主要介绍Java线程池的使用和如何正确的配置线程 ...
- 解决eclipse配置Tomcat时找不到server选项(Mac通用)
集成Eclipse和Tomcat时找不到server选项: 按照网上的步骤如下: 在Eclipse中,窗口(window)——首选项(preferences)——服务器(Server)——运行时环境( ...
- HTML5树叶飘落动画
查看效果:http://keleyi.com/keleyi/phtml/css3/15.htm 请使用Chrome浏览器查看本效果. html源代码: <!DOCTYPE HTML> &l ...
- 兼容 IE input button 左右内边距的增加
IE 下的按钮标签(input.button)会随着文字的增加导致文本左右两侧的间距越来越大.该问题存在于 IE6/IE7,IE8~IE10 没发现类似问题.一般情况下,只要给按钮标签设置 overf ...
- HTML 迷宫
今天补个遗,将很久以前研究 HTML5 的时候写的生成迷宫.迷宫寻路程序整理出来. 下载链接在文章最后. 简介 为什么要做这个 HTML5 迷宫程序?因为我喜欢.我愿意.也是向老程序员学习(见第5节) ...
- Android动画例子。
例子一: 补间动画效果,从右进,从左出. ImageSwitcher mImageSwitcher = new ImageSwitcher(this); mImageSwitcher.setFacto ...
- ref
ref: 当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中. 例如: class RefExample { //使用ref返回的函数 static void Method(ref ...
- Shell : debug
调试shell脚本的方法: 使用命令:sh -x yourShell.sh
- 搭建自己的PHP框架心得(一)
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...
- kattle 发送post请求
一.简介 kattle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述 ...