一、帶緩衝的輸入輸出流
緩衝是I/O的一種性能優化。緩衝流爲I/O流增加了內存緩衝區。
1. BufferedInputStream 類與 BufferedOutputStream 類
BufferedInputStream 類可以對所有 InputStream 類進行帶緩衝的包裝已達到性能優化。
BufferedOutputStream 類輸出信息和用 OutputStream 輸出信息完全一樣,只不過 BufferedOutputStream 用一個flush()方法將緩 衝區的數據強制輸出完。
代碼示例:
package com.aiit.book.file;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedStreamTest {
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
String content [] = {"牀前明月光","疑是地上霜","舉頭望明月","低頭思故鄉"};
File file = new File("E:\\\\word.txt");//創建文件內容
FileOutputStream fos = null;//創建FileOutputStream對象
BufferedOutputStream bos = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fos = new FileOutputStream(file,true);//實例化FileOutputStream對象
bos =new BufferedOutputStream(fos);
byte [] bContent = new byte[1024];//創建一個數組緩衝區
for(int k = 0;k < content.length;k++) {
bContent = content[k].getBytes();//將數組數據轉化爲字節數組
bos.write(bContent);//將字節寫入文件
}
System.out.println("寫入成功");
bos.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
byte[] bContent = new byte[1024];
int len = bis.read(bContent);
System.out.println("從文件中讀取內容:"+new String(bContent,0,len));
bis.close();
fis.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
運行結果:
2. BufferedReader 類與 BufferedWriter 類
BufferedReader 類與 BufferedWriter 類分別繼承 Reader 類與 Writer 類,這兩個類同樣具有內部緩衝機制,並可以以行爲單位 進行輸入輸出。
說明:在 BufferedWriter 類的Writer()方法時,數據並沒有立刻被寫入至輸出流,而是首先進入緩衝區中。如果想立刻將緩衝區 的數據寫入輸出流,一定要調用flush()方法。
package com.aiit.book.file;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedReaderAndWriter {
public static void main(String[] args) {
// TODO Auto-generated method stub
String content[] = {"一去二三裏","煙村四五家","亭臺六七座","八九十之花"};
File file = new File("E:\\word.txt");
try {
FileWriter fw = new FileWriter(file,true);
BufferedWriter bufw = new BufferedWriter(fw);
for(int k = 0;k<content.length;k++) {
bufw.write(content[k]);//將字符串數組中元素寫入磁盤文件中
bufw.newLine();//將數組中的單個元素以單行的形式寫入文件
}
bufw.close();//將BufferedWriter流關閉
fw.close();//將FileWriter流關閉
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
FileReader fr = new FileReader(file);
BufferedReader bufr = new BufferedReader(fr);
String s = null;//創建字符串對象
int i = 0;
//如果文件的文本行數不爲空,則進入循環
while((s = bufr.readLine())!=null) {
i++;
System.out.println("第"+ i +"行:"+s);
}
bufr.close();
fr.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二、數據輸入輸出流
數據輸入輸出流(DataInputStream 類與 DataOutputStream 類)允許應用程序從輸入流中讀取Java基本數據類型的數據,也就是說,當讀取一個數據時,不必在關心這個數據應該是哪種類型。
package com.aiit.book.file;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
*
* @author Administrator
*同過DataOutputStream類的寫入方法向指定磁盤文件中寫入不用類型的數據,然後通過
*DataInputStream類的相應讀取方法將寫入的不用類型數據輸入到控制檯上
*/
public class Example_Data {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File file = new File("E:\\word.txt");
FileOutputStream fs = new FileOutputStream(file,true);
DataOutputStream ds = new DataOutputStream(fs);
try {
ds.writeUTF("使用writeUTF()寫入數據");//將字符串寫入文件
ds.writeDouble(19.8); //將double數據寫入文件
ds.writeInt(298); //將int類型寫入文件
ds.writeBoolean(true); //將boolean類型寫入文件
ds.close(); //關閉寫入流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileInputStream fi = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fi);
try {
System.out.println("readUTF()方法讀取數據:"+dis.readUTF());
System.out.println("readDouble()方法讀取數據:"+dis.readDouble());
System.out.println("readInt()方法讀取數據:"+dis.readInt());
System.out.println("readBoolean()方法讀取數據:"+dis.readBoolean());
dis.close();
fs.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
運行結果: