JAVA——IO流 篇三

通過JAVA——IO流 篇一JAVA——IO流 篇二兩篇文章可以瞭解到關於字符流的操作。
下面是對字節流的操作。InputStreamOutputStream分別是字節輸入流和字節輸出流的基類。在基類下面有很多子類是對於文件等流進行操作,例如FileOutputStream是用來將數據寫入到輸出流文件。用於寫入諸如圖像數據的原始字節流。

例如:將字符通過字節流寫入bytedemo.txt文件。

	private static void writeTest() throws Exception
	{
		//1.創建字節輸出流對象,用於操作文件
		FileOutputStream fileOutputStream = new FileOutputStream("bytedemo.txt");
		//2.寫數據,直接寫入到了目的地中
		fileOutputStream.write("abcdefghijklmn".getBytes());
		//fileOutputStream.flush();
		//3.關閉資源
		fileOutputStream.close();
	}

字節流不需要編解碼,可以直接進行存儲。因此不需要通過flush()方法進行刷新。但是需要close()方法進行關閉,以釋放與此流相關聯的任何系統資源。
void write(byte[] b) 將 b.length個字節從指定的字節數組寫入此文件輸出流。
void write(byte[] b, int off, int len) 將 len字節從位於偏移量 off的指定字節數組寫入此文件輸出流。
void write(int b) 將指定的字節寫入此文件輸出流。

FileInputStream從文件獲取輸入字節,用於讀取諸如圖像數據的原始字節流。
例如:從bytedemo.txt文件中讀出數據。

	private static void readTest() throws Exception
	{
		//1.創建字節讀取流對象,和指定文件相關聯
		FileInputStream fileInputStream = new FileInputStream("bytedemo.txt");
		//2.讀取數據   (無法讀取中文)
	    int ch = 0;
		while((ch = fileInputStream.read()) != -1) 
		{
			System.out.println((char)ch);
		}
		//關閉資源
		fileInputStream.close();
	}

第二步讀取數據的形式多種多樣,如下也可

		byte[] by = new byte[1024];
		int len;
		while((len = fileInputStream.read(by)) != -1) 
		{
			System.out.println(new String(by));
		}
		byte[] by = new byte[fileInputStream.available()];
		int len;
		while((len = fileInputStream.read(by)) != -1) 
		{
			System.out.println(new String(by));
		}

fileInputStream.available();用於獲取文件的字節數,但是對於大文件,不適宜將byte數字建的和其一樣大,而是一部分一部分讀取。

字節流的重點不是讀取一個文本文件,而是用於讀取如圖像數據的原始字節流。下面例程是用於複製一個MP3文件。

private static void copyMp3()
	{	
		FileInputStream fileInputStream = null;
		FileOutputStream fileOutputStream = null;
		try {
			//創建讀取Mp3的字節流對象
			fileInputStream = new FileInputStream("F:\\tiny-heart-master\\birthday-basic\\music\\1.mp3");
			//創建寫入Mp3的字節流對象
			fileOutputStream = new FileOutputStream("F:\\1.mp3");
			//創建字節數組
			byte[] b = new byte[1024];
			int len;
			//讀取MP3文件
			while((len = fileInputStream.read(b)) != -1) 
			{
				//將讀取的字節寫入輸出流
				fileOutputStream.write(b,0,len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//關閉流
			if(fileOutputStream != null) 
			{
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			if(fileInputStream != null) 
			{
				try {
					fileInputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			System.out.println("操作完成");
		}
	}

和上面的一樣讀取數據的形式多種多樣,也可如下:

	private static void copyMp3Low() throws Exception
	{
		//創建讀取Mp3的字節流對象
		FileInputStream fileInputStream = new FileInputStream("F:\\tiny-heart-master\\birthday-basic\\music\\1.mp3");
		//創建寫入Mp3的字節流對象
		FileOutputStream fileOutputStream = new FileOutputStream("F:\\1.mp3");
		int ch;
		while((ch = fileInputStream.read()) != -1) 
		{
			fileOutputStream.write(ch);
		}
		fileInputStream.close();
		fileOutputStream.close();
		System.out.println("操作完成");
	}

通過read()讀取的效率太低。

	private static void copyMp3Availavle() throws Exception
	{
		//創建讀取Mp3的字節流對象
		FileInputStream fileInputStream = new FileInputStream("F:\\tiny-heart-master\\birthday-basic\\music\\1.mp3");
		//創建寫入Mp3的字節流對象
		FileOutputStream fileOutputStream = new FileOutputStream("F:\\1.mp3");
		
		int size = fileInputStream.available();
		byte[] b = new byte[size];
		fileInputStream.read(b);
		fileOutputStream.write(b);
		
		fileInputStream.close();
		fileOutputStream.close();
		System.out.println("操作完成");	
	}

通過 fileInputStream.available()的大小定義byte[]大小不適合讀取大文件。
前面字具有緩衝區,那麼相應的字節流也具有其緩衝區,輸入流的緩衝區爲BufferedInputStream、輸出流的緩衝區爲BufferedOutputStream

給上面的複製MP3文件添加緩衝區對象則如下:

	private static void copyMp3()
	{	
		BufferedInputStream bufferedInputStream = null;
		BufferedOutputStream bufferedOutputStream = null;
		try {
			//創建讀取Mp3的字節流對象
			FileInputStream fileInputStream = new FileInputStream("F:\\tiny-heart-master\\birthday-basic\\music\\1.mp3");
			//創建讀取Mp3的字節流緩衝區對象
			bufferedInputStream = new BufferedInputStream(fileInputStream);
			//創建寫入Mp3的字節流對象
			FileOutputStream fileOutputStream = new FileOutputStream("F:\\1.mp3");
			//創建寫入Mp3的字節流緩衝區對象
			bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
			//創建字節數組
			byte[] b = new byte[1024];
			int len;
			//讀取MP3文件
			while((len = bufferedInputStream.read(b)) != -1) 
			{
				//將讀取的字節寫入輸出流
				bufferedOutputStream.write(b,0,len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//關閉流
			if(bufferedOutputStream != null) 
			{
				try {
					bufferedOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			if(bufferedInputStream != null) 
			{
				try {
					bufferedInputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			System.out.println("操作完成");
		}
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章