您的位置:首页 > 产品设计 > UI/UE

黑马程序员-----IO之序列流SequenceInputStream

2014-01-13 16:53 417 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

SequenceInputStream表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

构造器:
SequenceInputStream(Enumeration<? extends InputStream> e):通过记住参数来初始化新创建的SequenceInputStream,该参数必须是生成运行时类型为InputStream对象的Enumeration型参数。

SequenceInputStream(InputStream s1, InputStream s2):通过记住这两个参数来初始化新创建的SequenceInputStream
(将按顺序读取这两个参数,先读取s1,然后读取s2),以提供从此SequenceInputStream读取的字节。

方法:
int read():从此输入流中读取下一个数据字节。
int read(byte[] b, int off, int len):将最多len个数据字节从此输入流读入byte数组。

使用序列流将多个文件合并为一个文件

public class SequenceDemo {

public static void main(String[] args) throws IOException {

//使用集合将多个输入字节流存储
Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("d:\\1.txt"));
v.add(new FileInputStream("d:\\2.txt"));
v.add(new FileInputStream("d:\\3.txt"));

//使用迭代
Enumeration<FileInputStream> enumeration = v.elements();
//使用序列流将多个输入流合并为一个输入流
SequenceInputStream sequence = new SequenceInputStream(enumeration);
FileOutputStream fos = new FileOutputStream("d:\\general.txt");

byte[] buf = new byte[1024];
int len = 0;
while((len = sequence.read(buf)) != -1){
fos.write(buf, 0, len);
}

sequence.close();
fos.close();
}

}


对一个图片进行切割,然后在合并。

public class SeqDemo {

public static void main(String[] args) throws IOException {

//splitFile();
mergeFile();
}

//切割
public static void splitFile() throws IOException{

//定义一个1M长度的数组,即每个文件大小为1M
byte[] buf = new byte[1024*1024];
int len = 0;
int count = 1;

FileInputStream fis = new FileInputStream("d:\\1.jpg");
FileOutputStream fos = null;

while((len = fis.read(buf)) != -1){
//将输出流定义在循环内,即每循环一次,创建一个新的对象,以便能够切割
fos = new FileOutputStream("e:\\" + (count++) + ".part");
fos.write(buf, 0, len);
}

fis.close();
fos.close();
}

//合并
public static void mergeFile() throws IOException{

//使用集合将流合并
Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("e:\\1.part"));
v.add(new FileInputStream("e:\\2.part"));
v.add(new FileInputStream("e:\\3.part"));
v.add(new FileInputStream("e:\\4.part"));

Enumeration<FileInputStream> e = v.elements();
SequenceInputStream s = new SequenceInputStream(e);
FileOutputStream fos = new FileOutputStream("e:\\all.jpg");

byte[] buf = new byte[1024];
int len = 0;
while((len = s.read(buf)) != -1){
fos.write(buf, 0, len);
}

fos.close();
s.close();

}

}


----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: