黑马程序员技术交流社区
标题:
有个关于合并流的问题,不知道错在哪里
[打印本页]
作者:
kfcka
时间:
2015-3-13 21:56
标题:
有个关于合并流的问题,不知道错在哪里
本帖最后由 kfcka 于 2015-3-13 21:59 编辑
import java.io.*;
import java.util.*;
class SplitAndMerge
{
public static void main(String[] args) throws IOException
{
MegerInputStream();
}
//切割流
public static void SplitOutputStream() throws IOException
{
//创建文件对象
File file=new File("d:\\1.jpg");
//创建字节输入流
FileInputStream fis=new FileInputStream(file);
//创建字节输出流
FileOutputStream fos=null;
//创建缓冲区
byte[] buf=new byte[1024*512];
int len=0;
//定义计数器
int count=1;
while((len=fis.read(buf))!=-1)
{
//创建一个字节输出流,当存满缓冲区后,再创建另一个字节输出流
fos=new FileOutputStream("a."+"part"+(count++));
fos.write(buf,0,len);
fos.close();
}
fis.close();
}
//合并流:用SequenceInputStream的构造方法Enumeration枚举来接收多个字节流
//因为Vector集合方法效率低,所以,用ArrayList集合代替Vector集合。
//替代的方法是:复写Enumeration方法的hasMoreElements()方法和nextElement()方法
public static void MegerInputStream() throws IOException
{
//创建ArrayList集合
ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
//将四个流对象加入到集合中
for(int x=1;x<5;x++)
{
al.add(new FileInputStream("a.part"+x));
}
//创建Inerator迭代器
Iterator<FileInputStream> it=al.iterator();
//复写Enumeration枚举对象
Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
{
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
//创建SequenceInputStream对象
SequenceInputStream sis=new SequenceInputStream(en);
//创建字节输出流
FileOutputStream fos=new FileOutputStream("b.jpg");
byte[] buf=new byte[1024*512];
int len=0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
sis.close();
fos.close();
}
}
复制代码
在合并流的地方有两处错误 ,错误提示如下 :
1.png
(38.87 KB, 下载次数: 14)
下载附件
2015-3-13 21:56 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2