Java的I/O笔记(3)
轉換流
可以把一個字節流轉換為一個字符流,原來按字節讀取的字節流“套上”它以后,就可以轉換為按字符讀取。
1: import java.io.*; 2: public class TestTransForm1 { 3: public static void main(String[] args) { 4: try { 5: OutputStreamWriter osw = new OutputStreamWriter( 6: new FileOutputStream ("d:\\bak\\char.txt")); 7: osw.write("mircosoftibmsunapplehp"); 8: System.out.println(osw.getEncoding()); 9: osw.close(); 10: osw = new OutputStreamWriter(new FileOutputStream("d:\\bak\\char.txt", true), 11: "ISO8859_1"); // latin-1 12: //true 表示文件末尾追加 13: osw.write("mircosoftibmsunapplehp"); 14: System.out.println(osw.getEncoding()); 15: osw.close(); 16: } catch (IOException e) { 17: e.printStackTrace(); 18: } 19: } 20: }?
OutputStreamWriter : OutputStream是字節流,Writer是字符流, 連起來的OutputStreamWriter就是把OutputStream轉換成Writer
構造函數(OutputStream out)??? FileOutputStream是OutputStream的子類,所以也可以傳入作為參數。
本來的字節流OutputStream,外面套個OutputStreamWriter,就變成字符流
?
1: import java.io.*; 2: public class TestTransForm2 { 3: public static void main(String args[]) { 4: InputStreamReader isr =5: new InputStreamReader(System.in);???
//in是系統的標準輸入流,是InputStream的一個子類 ,從DOS窗口輸入
6: BufferedReader br = new BufferedReader(isr); //為何又包了一層?因為BufferedReader有個很好用的方法readline() 7: String s = null; 8: try { 9: s = br.readLine(); 10: while(s!=null){ 11: if(s.equalsIgnoreCase("exit")) break; 12: System.out.println(s.toUpperCase()); 13: s = br.readLine(); 14: } 15: br.close(); 16: } catch (IOException e) { 17: e.printStackTrace(); 18: } 19: } 20: } //阻塞,不輸入就不能干別的?
數據流
DateOutputStream 和 DateInputStream 分別繼承自OutputStream 和 InputStream? ,屬于處理流
需要分別“套接”在OutputStream 和 InputStream 類型的節點流上
提供了可以存取與機器無關的Java原始數據類型(double,int…)的方法.
構造方法:DateOutputStream( OutputStream out)
???????????? DateInputStream( InputStream in )
1: import java.io.*; 2: public class TestDataStream { 3: public static void main(String[] args) { 4: ByteArrayOutputStream baos = 5: new ByteArrayOutputStream(); ? //new出一個“管道”的時候,同時自動建一個字節數組 6: DataOutputStream dos = 7: new DataOutputStream(baos); //DataOutputStream好處是可以直接輸出基本數據類型 8: try { 9: dos.writeDouble(Math.random()); //寫入一個8byte的數 10: dos.writeBoolean(true); //寫入一個1byte的boolean 11: ByteArrayInputStream bais = 12: new ByteArrayInputStream( baos.toByteArray ()); 13: System.out.println( bais.available() ); 14: DataInputStream dis = new DataInputStream(bais); 15: System.out.println( dis.readDouble ());????? 先寫先讀,所以要先readdouble,再readboolean 16: System.out.println( dis.readBoolean ()); 17: dos.close(); dis.close(); 18: } catch (IOException e) { 19: e.printStackTrace(); 20: } 21: } 22: }轉載于:https://www.cnblogs.com/bevin-h/archive/2012/04/23/2466064.html
總結
以上是生活随笔為你收集整理的Java的I/O笔记(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: COJ 1170 A Simple Pr
- 下一篇: 战国七雄中各国军队特点射