20 (IO字節流,文件拷貝)

1 IO流

2 FileInputStream

重要方法read(),每次讀取一個字節,返回值爲int。

當沒有字節的時候,會返回-1,所以文件的結束標記是-1,那麼會出現一個新的問題,read()爲什麼返回int值呢?

而不是返回byte呢?是這樣的,如果是byte,萬一文件中存儲了-1,程序會錯誤的以爲文件已經結束了,所以它返回的時候前面補上24個0。

3 FileOutputStream

FileOutputStream在創建對象的時候會清空文件內的內容,再寫進去。

追加:可以在構造時設置追加爲true

4 拷貝圖片

問題:當拷貝大文件時,效率很低

開發推薦:標準格式

5 BufferedInputStream和BufferedOutputStream

他們是對InputStream和OutputStream的包裝,使得他們更加強大,運用緩衝區大小8192,提高效率,每次讀取8192到緩衝區。緩衝區積累8192,使得效率很高。

flush和close,一個是刷新之後還可以用流,一個是刷新之後關閉流。

6 字節流讀取中文的問題

一箇中文等於兩個字節。所以會出現讀取半個字節的問題。

寫中文可以寫,但是需要將字符串.getBytes()轉換爲字符數組來寫。

7 異常處理模板

jdk1.6版本

package com.haidai.IO;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1 {

	public static void main(String[] args) throws IOException {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream("xxx.txt");
			fos = new FileOutputStream("yyy.txt");

			int len;
			while ((len = fis.read()) != -1) {
				fos.write(len);
			}
		} finally {
			if (fis != null || fos != null) {
				fis.close();
				fos.close();
			}
		}
	}

}

jdk1.7版本(自動關閉流)

package com.haidai.IO;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo2 {

	public static void main(String[] args) throws IOException {
		try (
			FileInputStream fis = new FileInputStream("xxx.txt");
			FileOutputStream fos = new FileOutputStream("yyy.txt");
			) {
			int len;
			while ((len = fis.read()) != -1) {
				fos.write(len);
			}
		}
	}

}

8 圖片加密

異或的特點。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章