24_IO流之緩衝流與序列化流
阿新 • • 發佈:2020-09-21
1. 位元組緩衝流
BufferedOutputStream
BufferedInputStream
package e_bufferStream; import java.io.*; /** * 位元組緩衝流 */ public class BufferStream01 { public static void main(String[] args) throws IOException { //位元組緩衝輸出流 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("9_io\\dest.txt")); //寫資料 //bos.write("hello\r\n".getBytes()); //bos.write("world\r\n".getBytes()); //釋放資源 bos.close(); //位元組緩衝輸入流 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("9_io\\src.txt")); //一次讀一個位元組 //int by; //while((by=bis.read()) != -1){ // System.out.print((char)by); //} //一次讀一個位元組陣列 byte[] bys = new byte[1024]; int len; while((len=bis.read(bys)) != -1){ System.out.print(new String(bys, 0, len)); } //釋放資源 bis.close(); } }
2. 字元緩衝流
2.1 基本功能
- BufferedReader:從字元輸入流讀取文字,緩衝字元,以提供字元,陣列和行的高效讀取。 可以指定緩衝區大小,或者可以使用預設大小。 預設值足夠大,可用於大多數用途。
- BufferedWriter:將文字寫入字元輸出流,緩衝字元,以提供單個字元,陣列和字串的高效寫入。可以指定緩衝區大小,或者可以接受預設大小。 預設值足夠大,可用於大多數用途。
package g_bufferedStream; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * 字元緩衝流 */ public class BufferedStream01 { public static void main(String[] args) throws IOException { //BufferedWriter(Writer out) //BufferedWriter fw = new BufferedWriter(new FileWriter("9_io\\dest.txt")); //fw.write("hello\r\n"); //fw.write("world\r\n"); //fw.write("java"); //fw.close(); //BufferedReader(Reader in) BufferedReader br = new BufferedReader(new FileReader("9_io\\src.txt")); //一次一個字元 //int ch; //while((ch=br.read()) != -1){ // System.out.print((char)ch); //} //一次一個字元陣列 char[] chs = new char[1024]; int len; while ((len = br.read(chs)) != -1) { System.out.print(new String(chs, 0, len)); } br.close(); } }
2.2 特有功能
- BufferedWriter: void newLine();寫一行行分隔符,行分隔符字串由系統屬性定義
- BufferedReader: String readLine(); 讀一行文字,到達結尾為null
package g_bufferedStream; import java.io.*; /** * 字元緩衝流 */ public class BufferedStream02 { public static void main(String[] args) throws IOException { //BufferedWriter(Writer out) BufferedWriter bw = new BufferedWriter(new FileWriter("9_io\\dest.txt")); //寫資料 /* for (int i = 0; i < 10; i++) { bw.write("hello" + i); bw.newLine(); bw.flush(); } bw.close(); */ //BufferedReader(Reader in) BufferedReader br = new BufferedReader(new FileReader("9_io\\src.txt")); //讀一行 //String line = br.readLine(); //System.out.println(line); //讀全部 String line; while((line = br.readLine()) != null){ System.out.print(line); } br.close(); } }
3. 物件序列化流
物件序列化:就是將物件儲存到磁碟中,或者在網路中傳輸物件.
3.1 ObjectOutputStream
ObjectOutputStream將Java物件的原始資料型別和圖形寫入OutputStream。
可以使用ObjectInputStream讀取(重構)物件。 可以通過使用流的檔案來實現物件的持久儲存。
如果流是網路套接字流,則可以在另一個主機上或另一個程序中重構物件。
只有支援java.io.Serializable介面的物件才能寫入流中。
如果不想被序列化的成員:用transient修飾
package h_objectOutput;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/**
* 物件序列化流
*/
public class ObjectOutput01 {
public static void main(String[] args) throws IOException {
//ObjectOuptutStream(OutputSteam out):建立一個寫入指定的OutputStream的OutputStream
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("9_io//dest.txt"));
//建立物件
Student s = new Student("tom", 20);
//寫入物件
oos.writeObject(s);//被序列化的物件需要實現Serializable介面
//釋放資源
oos.close();
}
}
3.2 ObjectInputStream
ObjectInputStream反序列化先前使用ObjectOutputStream編寫的原始資料和物件。
構造方法:ObjectInputStream(InputStream in);
成員方法:Object readObject();
package h_objectOutput;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/**
* 反序列化流
*/
public class ObjectInput02 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//建立反序列化流
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("9_io\\dest.txt"));
//讀取物件
Object o = ois.readObject();
Student s = (Student) o;
System.out.println(s.getName() + "," + s.getAge());
//釋放資源
ois.close();
}
}