IO输入输出流

来源:互联网 发布:mac怎么更新os 编辑:程序博客网 时间:2024/05/22 15:03

IO输入输出流

把通过不同输入输出设备(键盘,显示器,网络,内存等)之间的数据传输抽象表述为“流”。

  • IO输入输出流
    • 字节流
      • 字节输入流InputStream
      • 字节输出流OutputStream
    • 字符流
      • 字符输入流
      • 字符输出流
    • 实验
      • 控制台输入数据到Txt文件
      • 复制图片

字节流

字节输入流(InputStream)

InputStream(抽象类)
|–FileInputStream:文件字节输入流,向文件进行数据传递。
|–FilterInputStream :封装其它的字节输入流,并为它们提供额外的功能。
  |–BufferedInputStream:缓冲字节输入流,缓冲功能。
  |–DataInputStream:数据字节输入流,允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。
|–ByteArrayInputStream:字节数组输入流,包含一个内部缓冲区。
|–ObjectInputStream:对象字节输入流,用于恢复那些以前序列化的对象,对象必须实现Serializable接口。
|–SequenceInputStream:合并字节输入流,表示其他输入流的逻辑串联。
|–PipedInputStream:管道字节输入流,用于线程间数据传输。

字节输出流(OutputStream)

OutputStream(抽象类)
|–FileOutputStream:文件字节输出流。
|–FilterOutputStream:封装其他的字节输出流。
  |–BufferedOutputStream:缓冲字节输出流。
  |–DataOutputStream:基础数据字节输出流。
|–ByteArrayOutputStream:字节数组输出流。
|–ObjectOutputStream:对象字节输出流,专递序列化对象。
|–PipedOutputStream:管道字节输出流,可以将管道输出流连接到管道输入流来创建通信管道。
|–PrintStream:字节打印流,输出打印。

字符流

字节流+编码表

字符输入流

Reader(抽象类)
|–BufferedReader:缓冲字符输入流,具有缓冲作用。
  |–LineNumberReader:跟踪行号的缓冲字符输入流。
|–CharArrayReader:字符数组输入流,此类实现一个可用作字符输入流的字符缓冲区。
|–StringReader:字符串输入流,其源为一个字符串的字符流。
|–InputStreamReaer:(输入)字节流通向字符流的桥梁。
  |–FileReader,文件字符输入流,读取字符文件。

字符输出流

Writer(抽象类)
|–BufferedWriter:缓冲字符输出流。
|–CharArrayWriter:字符数组输出流。
|–StringWriter:字符串输出流。
|–OutputStreamWriter:(输出)字节流通向字符流的桥梁。
  |–FileWriter:文件字符输出流。
|–PrintWriter:字符打印流,打印字符流数据。

实验

控制台输入数据到Txt文件

    public void writeToTXT() throws IOException{        File file= new File("E://Test.txt");        //创建一个File对象        if(!file.exists()){                         //判断File对象对应的文件或目录是否存在            file.createNewFile();                   //创建File对象所指定的新文件,若已经存在不创建,返回false        }        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));   //获取键盘输入        FileWriter fw = new FileWriter(file);                                       //利用往文件传递数据的字符输出流输出        String str;        while((str=bf.readLine())!=null){            if("over".equals(str)){                                                 //若回车输入“over”则结束程序                break;            }            fw.write(str);                                                                      fw.write("\r\n");                                                       //换行语句              fw.flush();                                                             //刷新缓冲的输出流                  }        fw.close();        bf.close();    }

复制图片

    public void copyPic() throws IOException{        BufferedInputStream bi = new BufferedInputStream(new FileInputStream("E://Test.jpg"));        BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("S://Test.jpg"));        byte[] buff = new byte[1024];                            //字节数组缓冲区        int len;        long beginTime = System.currentTimeMillis();             //开始时间        while((len=bi.read(buff))!=-1){                          //判断是否读到文件末尾            bo.write(buff, 0, len);                              //从第一个字节开始,写入len字节        }        long endTime = System.currentTimeMillis();               //结束时间        System.out.println("复制消耗时间:"+(endTime-beginTime)+"毫秒");    }
0 0
原创粉丝点击