zoukankan      html  css  js  c++  java
  • IO流

    一、流

    java中把不同的输入、输出源(键盘、文件、内存、网络连接等)抽象表述为“流”(stream)

    如上图所示,通过IO流,我们的程序要想访问内存、硬盘、网络等IO目的地,全通过IO流的方法就可以完成,统一了访问方法。

    根据数据流方向的不同,可以将数据流分为输入流和输出流。如下图示,我们的程序通过输入流读取数据

    输入流只能从中读取数据,而不能向其写出数据

    输出流恰好相反

    二、根据流中数据类型的不同,可以分为字节流和字符流,字节流传送的是字节数据(byte),字符流传送的是字符数据。

    InputStream是所有字节输入流的顶层父类

     int read()是其基本方法,返回的int表示读取的数据指向,如果到了流的末尾,则返回-1

    FileInputStream表示指向文件的字节输入流

    BufferedInputStream用于给流增加缓冲的功能

    OutputStream为字节输出流的顶层父类

    void write(int i)

    FileOutputStream表示输出到文件的字节流

    BufferedOutputStream用于给流增加缓冲的功能。

    一个输入流/输出流的综合例子:实现文件的复制

    package com.csu.test1;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class FileCopy {
    public static void main(String[] args) {
        try {
            InputStream is=new FileInputStream("D:/ex2.txt");
            OutputStream os=new FileOutputStream("E:/ex2.txt");
            BufferedInputStream bis=new BufferedInputStream(is);
            BufferedOutputStream bos=new BufferedOutputStream(os);
            int i=bis.read();
            while(i!=-1){
                bos.write(i);
                i=bis.read();            
            }        
            bos.close();bis.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }            
    }
    }

     三、字符流

    字节流一次读取一个字节的数据,而字符流一次读取一个字符的数据。如“中a”两个字符,如果使用字节流读取,“中”字占有两个字节,读取两次,被转化成两个字符,所以会成为乱码。而用字节流,一个“中”字,只会读取一次,一次读取两个字节。

    1.字符输入流(Reader),字符输入流的父类是Reader

    InputStreamReader表示一个字节流转化成字符流的工具流。

    FileReader 表示指向文件的字符输入流。

    BufferedReader 表示给字符输入流增加缓冲功能的字符流。

    int read()方法  读取一个字符的数据。

    示例程序:将键盘字节流转化成字符流

    package com.csu.test1;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    
    public class KeyReaderTest {
        /**
         * 
         * InputStreamReader将字节流转化为字符流
         */
    public static void main(String[] args) {
        InputStream is=System.in;
        System.out.println("Please input:");
        //将字节流转化成字符流
        Reader r=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(r);
        //一次从流里读取一行
        try {
            String line=br.readLine();
            while(line!=null){
                System.out.println(line);
                line=br.readLine();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    }

    2.字符输出流Writer

    与Reader流类似

  • 相关阅读:
    hdu4639 hehe ——斐波纳契数列,找规律
    codefoces round193a
    codeforces 192e
    abbyy cup a
    年中总结
    codeforces 192a
    codeforces 192b
    codeforces 192 c
    codeforces 192 D
    codeforces magic five --快速幂模
  • 原文地址:https://www.cnblogs.com/chaofn/p/4569265.html
Copyright © 2011-2022 走看看