从JDK源码看OutputStream

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取10G资料包与项目实战视频资料

作者:超人汪小建(seaboat)

出处:https://blog.csdn.net/wangyangzhizhou/column/info/16032


概况

前面已经了解了输入流《[从JDK源码看InputStream][JDK_InputStream]》,接着看对应的输出流,JDK 给我们提供了很多实用的输出流 xxxOutputStream,而 OutputStream 是所有字节输出流的抽象。包括 ByteArrayOutputStream 、FilterOutputStream 、BufferedOutputStream 、DataOutputStream 和 PushbackOutputStream 等等。

继承结构

    --java.lang.Object
      --java.io.OutputStream

类定义

    public abstract class OutputStream implements Closeable, Flushable

OutputStream 被定为 public 且 abstract 的类,实现了 Closeable 和 Flushable 接口。

Closeable 接口表示 OutputStream 可以被close,接口定义如下:

    public interface Closeable extends AutoCloseable {
        public void close() throws IOException;
    }

而 Flushable 接口表示 OutputStream 可以进行 flush 操作,接口定义如下。

    public interface Flushable {
        void flush() throws IOException;
    }

主要属性

没有属性

主要方法

write方法

一共有三个 write 方法,其中有一个抽象的 write 方法,其余两个 write 方法都会调用这个抽象方法,该方法用于将一个字节写入一个输出流读。

主要看第三个 write 方法即可,它传入的三个参数,byte数组、偏移量和数组长度。该方法主要是将指定长度的字节数据写入到输出流中,而在写入前会检查数组是否为空,偏移量和长度是否满足正确的条件等等。最后才是调用抽象方法进行写操作,抽象方法一般都由子类实现具体的逻辑。


public abstract void write(int b) throws IOException; public void write(byte b[]) throws IOException { write(b, 0, b.length); } public void write(byte b[], int off, int len) throws IOException { if (b == null) { throw new NullPointerException(); } else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) { throw new IndexOutOfBoundsException(); } else if (len == 0) { return; } for (int i = 0 ; i < len ; i++) { write(b[off + i]); } }

flush方法

对该输出流中缓冲的字节进行 flush 操作,即之前写入该输出流缓冲区的字节将被强制 flush 到目的地。其中目的地可能的情况为:
1. 如果是一个文件,那么 flush 操作只能保证该输出流缓冲区的字节数据写入到操作系统中等待写入,而并不能保证将其写到磁盘上。
2. 如果是套接字,那么 flush 操作只能保证写入到操作系统中等待传到其他节点,而不能保证其能立刻写入到远程节点。
3. 如果是其他设备,那么 flush 也只是将其写入操作系统,而到达其他设备则由操作系统控制。

    public void flush() throws IOException {}

close方法

此方法用于关闭输出流,并且释放相关资源,作为抽象类,这里关闭动作不做任何事。另外关闭了的流无法再重新打开。

    public void close() throws IOException {}
赞(1) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » 从JDK源码看OutputStream

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏