首页 > 代码库 > 流之输出流

流之输出流

Java的基本输出流类是:java.io.OutputStream:

public abstract class OutputStream

这个类提供了写入数据所需的基本方法。这些方法包括:

public abstract void write(int b) throws IOException
public void write(byte[] data) throws IOException
public void write(byte[] data,int offset,int length) throws IOException
public void flush() throws IOException
public void close() throws IOException

OutputStream的子类使用这些方法向某种特定介质写入数据。例如,FileOutputStream使用这些方法将数据写入文件。TelnetOutputStream使用这些方法将数据写入网络连接。ByteArrayOutputStream使用这些方法将数据写入扩展的字节数组。但不管写入哪种介质,大多都会使用同样的这5个方法。

OutputStream的基本方法是 write(int b)。这个方法接受一个 0 到 255 之间的整数作为参数,将对应的字节写入到输出流中。这个方法声明为抽象方法,因为各个子类需要修改这个方法来处理特定的介质。例如,ByteArrayOutputStream可以用纯java代码实现这个方法,将字节复制到数组中。与此不同,FileOutputStream则需要使用原生代码,这些代码了解如何将数据写入到主机平台的文件中。

注意,虽然这个方法接受一个int作为参数,但它实际上会写入一个无符号字节。Java没有无符号字节数据类型,所以这里要使用int来代替。无符号字节和有符号字节之间唯一的真正的区别:它们都由8个二进制位组成,当使用write(int b)将int写入一个网络连接时,线缆上只会放8个二进制位。如果将一个超出 0~255 的int传入write(int b),将写入这个数的最低字节,其他3个字节将被忽略(这正是将int强制转换为byte的结果)。提示:不过,在极少数情况下,你可能会看到一些有问题的第三方类,在写超出 0~255 的值时,它们的做法有所不同,比如会抛出IllegalArgumentException异常或者总是写入255,所以尽可能要避免写超出 0~255 的int

未完待续....................................

流之输出流