IO包中的其他類:
1.打印流:提供了打印方法,可以將各種數據類型的數據原樣打印 字節打印流PRintStream 構造函數可以接受的參數類型: (1)File對象 File (2)字符串路徑 String (3)字節輸出流 OutputStream
字符打印流PrintWriter 構造函數可以接受的參數類型: (1)File對象 File (2)字符串路徑 String (3)字節輸出流 OutputStream (4)字符輸出流:Writer 2.SequenceInputStream(串聯流) 用于把多個流中的數據寫入一個流中,構造函數傳入Enumeration<? extends InpuStream> 需要用到Vector 3.操作對象 ObjectInputStream,ObjectOutputStream 被操作的對象要實現Serializable(標記接口), Serializable運行時使用一個稱為serialVersionUID的版本號與每個可序列化類相關聯, 次版本號根據類中的成員計算得出。。如果接受者加載該對象的類的serialVersionUID與對應的發送者的版本號不同,則 反序列化會導致InvalidClassException??尚蛄谢惪梢酝ㄟ^聲明名為serialVersion的字段(該字段必須是靜態,最終的long型字段) 顯式聲明自己的serialVersion,如此當改變類成員時,也可反序列化。
靜態成員不會被序列化,因為只能序列化對中的數據,靜態成員在方法區。 如果希望摸個成員不被序列化,可以用transient修飾,保證其值在對內存中存在,而不再文本文件中存在 分別使用readObject(Object) 和writeObject(Object)方法讀取對象和持久化對象
4.管道流 PipedInputStream,PipedOutputStream 管道輸入流應該連接到管道輸出流;管道輸入流提供要寫入管道輸出流的所有數據字節。 通常,數據由某個線程從 PipedInputStream 對象讀取,并由其他線程將其寫入到相應的 PipedOutputStream。 不建議對這兩個對象嘗試使用單個線程,因為這樣可能死鎖線程 。管道輸入流包含一個緩沖區,可在緩沖區限定的范圍內將讀操作和寫操作分離開。 如果向連接管道輸出流提供數據字節的線程不再存在,則認為該管道已損壞 5.RandomaccessFile : 該類不算是流體系中的子類,是直接繼承自Object 但是他是IO包成員,因為它具備讀寫功能 內部封裝了一個數組,而且通過指針對數組的元素進行操作 可以通過getFilePointer獲取指針位置 同事可以通過seek改變指針位置 其實完成讀寫的原理是內部封裝了字節輸入流和輸出流 通過其構造函數可以看出,該類只能操作文件,而且操作問價還有模式:
6.操作基本數據類型 DataInputStream,DataOutputStream 7.操作字節數組 :用流的讀寫思想來操作數組 ByteArrayInputStream:在構造的時候,需要接收數據員,而且數據源是一個字節數組 ByteArrayOutputStream:在構造的時候,不用定義數據目的地,因為該對象中內部已經封裝了可變長度的字節數組 這就是數據目的地 因為這兩個流對象都操作數組,并沒有使用系統資源,所以不用close關閉 8.操作字符數組:CharArrayReader,CharArrayWriter 9.將字符流轉對象化為字節流對象,使用轉換流:InputStreamReader(字節通向字符的橋梁) InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt"),"gbk") OutputStreamWriter(字符通向字節的橋梁) OutputStreamReader osr=new OutputStreamReader(new FileOutputStream("utf.txt"),"UTF-8") 10.編碼:字符串變成字節數組 String>String new String(byte[],charsetName) Tomcat的編碼方式是iso8859-1 如果使用gbk編碼方式存儲了數據,取得時候解碼用的是iso8859-1, 此時可以將解碼出的數據再用iso8859-1進行編碼得到原來的字節數據,然后再用gbk解碼即可 但是如果期初是用utf-8解碼而導致亂碼,則不可逆轉,因為gbk和utf-8均識別中文
新聞熱點
疑難解答