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:  }
posted @ 2012-04-23 10:22  bevin-H  阅读(222)  评论(0)    收藏  举报