美文网首页
14. Java IO: OutputStream

14. Java IO: OutputStream

作者: kopshome | 来源:发表于2017-11-23 09:50 被阅读0次

    想要查看此教程的目录请点击:Java IO教程目录贴地址


    Java IO API中,OutputStream是所有输出流的基类。子类包括BufferedOutputStream,FileOutputStream等等。想要了解所有的流相关的清单,请看“Java IO Overview”章节

    OutputStream介绍和数据目的地

    OutputStream经常用来连接到数据目的地,比如文件,网络连接,管道等等。OutputStream将所有数据的数据写入目的地后即结束。

    write(byte)

    write(byte)方法用来向流中写入单个字节。参数为int类型,也就是准备写出的数据。只有int值的第一个字节会被写入。其余的都会被忽略。

    OutputStream的子类可以有更多write()方法。例如,DataOutputStream可以写java基础类型如int,long,float,double,boolean等。相对应的方法writeBoolean(),writeDouble()等

    下面是OutputStream的write()例子:

    OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");
    
    while(hasMoreData()) {
      int data = getMoreData();
      output.write(data);
    }
    output.close();
    

    这个例子首先创建了一个FileOutputStream去获取要读的数据文件。然后进入一个循环,循环的条件是有数据,这只是一个伪代码,并没有去展示怎么确定有数据。

    在循环里,调用了方法getMoreData()去获取下一次要往OutputStream写的数据,然后写入数据。

    write(byte[])

    OutputStream也有write(byte[] bytes)方法和write(byte[] bytes, int offset, int length)方法,这两个都是写入一个或部分数组内的字节到OutputStream。

    write(byte[] bytes)方法是将数组内所有数据写入到OutputStream。而write(byte[] bytes, int offset, int length)可以规定从哪里开始写,一共写多少长度的数据。

    flush()

    OutputStream的flush()方法刷新所有已经写入OutputStream的数据到数据目的地。例如,如果OutputStream是一个FileOutputStream的话,写入FileOutputStream的的字节可能并没有全部被写入到磁盘,他们可能在内存缓冲区里,虽然你的Java代码已经将数据写入到FileOutputStream,但是通过flush()方法,你可以确保数据都已经写到磁盘(网络连接或其他的数据目标地)

    close()

    当你往OutputStream写完数据的时候你会去关闭掉流,那么就要利用close()方法。由于OutputStream各式的写入方法可能会抛出IOException,那么你就要在finally代码块中来关闭流。下面是一个关闭流的例子:

    OutputStream output = null;
    
    try{
      output = new FileOutputStream("c:\\data\\output-text.txt");
    
      while(hasMoreData()) {
        int data = getMoreData();
        output.write(data);
      }
    } finally {
        if(output != null) {
            output.close();
        }
    }
    

    这个例子是在finally中调用close()方法,确保流被关闭。但是它依然没有完美解决异常问题。但是我已经在“Java IO异常处理”章节说明了这个问题的解决办法。

    相关文章

      网友评论

          本文标题:14. Java IO: OutputStream

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