字節流與字符流的不同是他們的處理方式,字節流是最基本的,采用ASCII編碼。
但是實際上很多數據是文本,所以提出字符流的概念,采用unicode編碼
兩者之間通過inputStreamReader與outputStreamWriter來關聯,實際上是通過byte[]與String來關聯
字節流輸出: 程序-->字節流-->文件
字符流輸出:程序-->字符流-->緩沖-->文件
程序中所有的數據都是以流的方式進行傳輸與保存的
在關閉字符流后會強制性的將緩沖區的數據輸出,若沒有關閉緩沖區的內容是無法輸出的,
如果想不關閉並且還想輸出緩沖區的內容,用writer類的flush()方法來完成,
try{
fis=new FileInputStream("c:\\db\\hello.txt"); //存在的
fos=new FileOnputStream("c:\\hello.txt"); //需要的
}
.java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
字節輸入流:InputStream,字節輸出流:OutputStream
字符輸入流:Reader,字符輸出流:Writer
.解釋一下java.io.Serializable接口(面試常考)
類通過實現 Java.io.Serializable 接口以啟用其序列化功能。未實現此接口的類將無法使其任何狀態序列化或反序列化。
1.PrintStream、BufferedWriter、PrintWriter的比較?
PrintStream類的輸出功能非常強大,通常如果需要輸出文本內容,都應該將輸出流包裝成PrintStream后進行輸出。
與其他輸出流不同,PrintStream 永遠不會拋出 IOException;而是,異常情況僅設置可通過 checkError 方法測試的內部標志
另外,為了自動刷新,可以創建一個 PrintStream
BufferedWriter:將文本寫入字符輸出流,緩沖各個字符從而提供單個字符,數組和字符串的高效寫入。通過write()方法可以將獲取到的字符輸出,然后通過newLine()進行換行操作。BufferedWriter中的字符流必須通過調用flush方法才能將其刷出去。並且BufferedWriter只能對字符流進行操作。如果要對字節流操作,則使用BufferedInputStream。
PrintWriter的println方法自動添加換行,不會拋異常,若關心異常,需要調用checkError方法看是否有異常發生,PrintWriter構造方法可指定參數,實現自動刷新緩存(autoflush);
.什么是java序列化,如何實現java序列化?
Java對象的序列化指將一個java對象寫入OI流中,與此對應的是,對象的反序列化則從IO流中恢復該java對象。
如果要讓某個對象支持序列化機制,則必須讓它的類是可序列化的,為了讓某個類是可序列化的,該類必須實現Serializable接口或Externalizable接口