14. Java IO: OutputStream

想要查看此教程的目录请点击: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)