概述
Java的io流,可大致分爲兩類,字節流和字符流
如下圖:
字節流(Byte Streams)
所謂字節流,即在java程序採用8位的字節單位實現輸入和輸出,如上圖所示,所有的字節流都繼承自 InputStream(輸入流)和OutputStream(輸出流).
首先看一下官方的小例子:
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
FileInputStream 爲源(文件)提供了read()方法,取出一定單位(字節)的內容,並將其賦值給一個int變量後,FileOutputStream 再將得到的變量c輸出至新文件中,這就是整個輸入輸出的整個過程,如下圖:
切記 在程序完成操作後,一定要記得關閉輸入,輸入流,否則可能產生資源泄露(resource leak)
字符流(Character Streams)
Java 存儲使用unicode 編碼存儲字符,字符流根據系統本地環境使用具體的編碼,當然也可以手動指定編碼,中文系統一般使用utf-8或者gbk
如:
例:
FileReader inputStream = null;
FileWriter outputStream = null;
try {
inputStream = new FileReader("xanadu.txt");
outputStream = new FileWriter("characteroutput.txt");
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(c);
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
和字節流的操作基本相同,值得注意的是當inputstream執行read()賦值給int變量c的時候,是將獲取的字符傳遞給c的後16位,而字節流獲取的字節傳遞至int變量的後8位。這是由java基本變量類型的長度決定的