前面已经了解了输入流《从JDK源码看InputStream》,接着看对应的输出流,JDK 给咱们提供了不少实用的输出流 xxxOutputStream,而 OutputStream 是全部字节输出流的抽象。包括 ByteArrayOutputStream 、FilterOutputStream 、BufferedOutputStream 、DataOutputStream 和 PushbackOutputStream 等等。java
--java.lang.Object
--java.io.OutputStream
复制代码
public abstract class OutputStream implements Closeable, Flushable
复制代码
OutputStream 被定为 public 且 abstract 的类,实现了 Closeable 和 Flushable 接口。数组
Closeable 接口表示 OutputStream 能够被close,接口定义以下:bash
public interface Closeable extends AutoCloseable {
public void close() throws IOException;
}
复制代码
而 Flushable 接口表示 OutputStream 能够进行 flush 操做,接口定义以下。并发
public interface Flushable {
void flush() throws IOException;
}
复制代码
没有属性机器学习
一共有三个 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 到目的地。其中目的地可能的状况为:spa
public void flush() throws IOException {}
复制代码
此方法用于关闭输出流,而且释放相关资源,做为抽象类,这里关闭动做不作任何事。另外关闭了的流没法再从新打开。操作系统
public void close() throws IOException {}
复制代码
=============广告时间===============.net
公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。
鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有须要的朋友能够购买。感谢各位朋友。
=========================
相关阅读:
欢迎关注: