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 圖片加密
異或的特點。