天天看點

黑馬程式員-----IO之序列流SequenceInputStream

---------------------- 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