IO流

作者: woochen123 | 来源:发表于2017-11-15 11:48 被阅读0次

    1.流 stream

    java对文本的读和写是通过输入流和输出流来完成的。
    输出流:OutputStream

    //读写规范
    //为了得到正确的变量作用域,在try外声明流变量
    FileOutputStream fos = null;
    byte[] buf = new byte[2048];
       try {
                //在try块内完成初始化
                fos = new FileOutputStream(file);
           while ((len = is.read(buf)) != -1) {
                    fos.write(buf, 0, len);
                }
                fos.flush();
            } finally {
                try {
                    //为了避免空指针异常
                    if (fos != null) 
                    //释放资源(文件句柄,网络端口,其他资源)
                    fos.close();
                } catch (IOException e) {
                  //忽略或者记录为日志
                }
            }
    //在java7之后引入了“带资源的try”构造,不需要在try声明变量;也不需要finally子句,java会对所有AutoCloseable对象自动调用close(),所以
     try {
                //在try块内完成初始化
                FileOutputStream fos = new FileOutputStream(file);
                fos.flush();
            }catch(IOException ex){
                 System.err.println(ex.getMessage());
            }
    
    

    输入流:InputStream

    InputStream is = new FileInputStream();
    byte[] b = new byte[1024];
    int read = is.read(b);
    
    //补充方法
    public void mark(int readAheadLimit);  //给输入流设置标记
    public void reset() throws IOException;  //将输入流重置到标记处,可以从标记处开始读取
    public boolean markSupport();  //判断当前输入流流是否支持标记
    

    2.缓冲流(BufferedStream)

    • 输出缓冲流:BufferedOutputStream
      在开始写入数据时,首先将数据写入缓冲区,到达一定大小后,再一次性将数据写入到原始输出流中(减少了数据量的传输大小,从而提高了写的速度)
    public BufferedInputStream(InputStream inputStram);
    public BufferedInputStream(InputStream inputStram,int bufferSize);
    
    • 输入缓冲流:BufferedInputStream
      在开始读取数据时(从本地磁盘读取数据),首先将数据读到缓冲区,到达一定的大小后,再一次性将数据放入原始输入流中(从底层流中读取几百字节的速度几乎和读取1字节的速度相同,所以可以显著提升性能;但是由于网络传输速度的瓶颈,在网络连接的场景下效果不会十分明显)
    public BufferedOutputStream(OutputStream outputStram);
    public BufferedOutputStream(OutputStream outputStram,int bufferSize);
    

    3.过滤器输出流(PrintStram)

    public PrintStram(OutputStram outputStrem);
    public PrintStram(OutputStram outputStrem,boolean autoFlush);
    

    注意:
    1.PrintStram会掩盖所有的异常,但是不会抛出
    2.在不同系统(window,mac)展示结果可能不尽相同
    3.应该尽量减少PrintStram的使用

    4.数据流(DataStream)

    可以用二进制格式读/写java的基本数据类型和字符串。(主要用于两个不同的Java程序之间交换数据)
    数据输入流:DataInputStram
    数据输出流:DataOutputStream

    5.阅读器(reader),书写器(writer)

    串链到原始的输入/输出流上,使程序可以对字符进行操作(原始流是对字节操作),同时可以处理字符的编码
    InputStreamReader:将字符输入流按照指定的编码(没有指定就使用默认的编码)转化为字节流,然后放入原始的输入流中

      public InputStreamReader(InputStream in, Charset charset) { }
    

    OutputStreamWritter:将字节输出流按照指定的编码(没有指定就使用默认的编码)转化为字符流,然后放入原始的输出流中

      public OutputStreamWriter(OutputStream out, Charset cs) { }
    

    6.过滤器阅读器(BufferedReader),过滤器书写器(BufferedWritter)

    BufferedReader:常用方法readLine() //读入一行
    BufferedWritter:常用方法newLine() //写入一行

    7.PrintWritter

    用于取代PrintStram类,它能正确的处理多字节字符集和国际化文本。

    相关文章

      网友评论

          本文标题:IO流

          本文链接:https://www.haomeiwen.com/subject/uarhzttx.html