复习java: I/O

来源:互联网 发布:mysql乐观锁怎么实现 编辑:程序博客网 时间:2024/06/11 23:53

    java类库中常常使用"流"这个概念,它代表任何有能力产出数据的数据源对象或是有能力接受数据的接收端对象

   大体来说 I/O 包可以分为节点流类和包装类,有点类似路由和终端用户.

   InputStream节点流:

   ByteArrayInputStream    FileInputStream    PipedInputStream

    OutputStream节点流:

    ByteArrayOutputStream    FileOutputStream    PipedOutputStream

   FilterInputStream类型包装类:

   DataInputStream    BufferedInputStream    PushbackInputStream

    FilterOutputStream类形包装类:

    DataOutputStream    BufferedOutputStream    PrintStream

    在java1.1之后,为了满足国际化的需要,又推出了Reader和Writer类,主要是解决 字符问题的,而InputStream和OutputStream是为了解决字节问题的,但不是说后面两个类就已经被完全淘汰了.DataInputStream 有时候还是挺有用的.

    java1.1类相应的节点类:

    Reader    CharArrayReader    FileReader

    Writer    CharArrayWriter    FileWriter

    相应的包装类:

    FilterReader    BufferedReader    LineNumberReader    PushBackReader

    FilterWriter    BufferedWriter    PrintWriter

   

    通过InputStreamReader和OutputStream可以把InputStream和OutputStream转换成

         Reader和Writer

   比较特殊一点的,DataOutputStream    File    RandomAccessFile   

    SequenceInputStream

   

    例子:

    BufferedReader in = new BufferedReader(new FileReader("Test.java"));

    包装类与节点类的结合,Buffered充当了缓冲区

    StringReader in = new StringReader(str)  //String str = .......

    DataInputStream in = new DataInputStream(new ByteArrayInputStrea(str.getByte())); 

    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("Test.txt")));

         格式输出:

    DataOutputStream out = new DataOutputStream(new BufferedOutputStream(

              new FileOutputStream("Data.txt")));

    out.writeUTF("..........");

    out.writeDouble(1.234);

         格式输入:

     DataInputStream in = new DataInputStream(new BufferedInputStream(

               new FileInputStream("Data.txt")));

    in.readUTF();

    in.readDouble();

    注意结束时要调用close(),以保证将缓冲区的内容清空.

    管道流主要运用与线程之间的通讯.

    I/O重定向:

         setIn(InputStream)    setOut(PrintStream)    setErr(PrintStream)

    最后看一下标准输入,一次读一行输入然后打印,首先是未包装的:

      while(true) {
           ch = System.in.read();
           switch(ch) {
                 case '/r':
                        break;
                 case'/n':
                        info = new String(buf,0,pose);
                        break; 
                 default:
                        buf[pose++] = (byte)ch;          
            } 

  }

   将System.in包装后为:

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    String str;

    while( (s=in.readLine()) != null && str.length() != 0   )

                 System.out.println(str);

     另外还有序列化,压缩等,值得注意的是1.4版又推出了NIO,就是新I/O,但是老的I/O仍然有使用价值.

  

 

 

 

原创粉丝点击