Java 日看一类(40)之IO包中的OutputStream类和Closeable接口

原创 2018年04月17日 13:11:37

该类是输出流的“鼻祖”,所有的输出流都继承了该类


该类完成了Closeable,Flushable接口

无引入其他包


该类的类头注释如下:

/**
 * This abstract class is the superclass of all classes representing
 * an output stream of bytes. An output stream accepts output bytes
 * and sends them to some sink.
 * <p>
 * Applications that need to define a subclass of
 * <code>OutputStream</code> must always provide at least a method
 * that writes one byte of output.
 *
 * @author  Arthur van Hoff
 * @see     java.io.BufferedOutputStream
 * @see     java.io.ByteArrayOutputStream
 * @see     java.io.DataOutputStream
 * @see     java.io.FilterOutputStream
 * @see     java.io.InputStream
 * @see     java.io.OutputStream#write(int)
 * @since   JDK1.0
 */

大意如下:

该抽象类是所有byte输出流的顶级类

一个输出流接收需要输出的bytes然后发送到底层

应用需要去声明该类的子类,并且必须至少提供用于写出一个byte的方法



该类含有如下的成员方法:

写出一个byte(必须被子类提供)

public abstract void write(int b) throws IOException;

写出一个byte数组

public void write(byte b[]) throws IOException {
    write(b, 0, b.length);
}

写出byte数组中的特定位置和长度的byte

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++) {//循环调用写出一个byte的方法
        write(b[off + i]);
    }
}

刷新流(该类会强制流中的缓存数据立即被写出,一般也是这么用,写了一些东西,差不多就flush。该方法只能保证将数据提交给操作系统,不能保证数据被写到物理介质上(当输出目标为操作系统提供的抽象概念时,如文件))

public void flush() throws IOException {
}

关闭流

public void close() throws IOException {
}


该类的结构基本就是所有输出类的大体结构,其他输出流在此基础上进行扩充,例如buffer类添加了缓冲区,writer提供了转码,Filter提供了双层输出流来进行过滤(内含实际的输出流,外部封包了一层)


Closeable该类继承自AutoCloseable类

引入了如下包(我也不知道为啥在同一个包内需要import,估计是写错了)

import java.io.IOException;


该类类头注释如下:

/**
 * A {@code Closeable} is a source or destination of data that can be closed.
 * The close method is invoked to release resources that the object is
 * holding (such as open files).
 *
 * @since 1.5
 */

大意如下:

Closeable标识了可以被关闭数据源或者目标

close方法被调用来释放被该对象掌控的资源(例如打开的文件)


该类含有如下的成员方法:

关闭当前对象,释放资源(在流已经关闭的情况下不产生任何影响。该方法在某些特定情况下可能会调用失败,抛出IO异常。在这种情况下强烈建议先放弃底层资源,在IOException被抛出前内部关闭(特定情况见AutoCloseable))

public void close() throws IOException;


该类被几乎所有输入输出类继承,效果和作用也十分清晰。只是在报错的时候需要注意出现的是哪种特殊情况,同时并处理Close失败的异常。

组件重用需要专人负责

不知道诸位所在的公司如何,至少在我现在的公司,代码的重用性是很差的。同一个模块在多个项目组之间重复开发,甚至同一个模块在同一个项目的不同版本之间也是不同的人重复开发......我们把大量的时间放在了做...
  • optman
  • optman
  • 2001-09-10 19:35:00
  • 803

探究java IO之AutoCloseable,Closeable和Flushable接口

文章转自: http://my.oschina.net/fhd/blog/344961 有3个接口对于流类相当重要。其中两个接口是Closeable和Flushable,它们是在jav...
  • a1259109679
  • a1259109679
  • 2015-06-18 21:21:48
  • 2021

java.io.Closeable

public interface Closeable Closeable 是可以关闭的数据源或目标。调用 close 方法可释放对象保存的资源(如打开文件)。 void close() ...
  • caiwenfeng_for_23
  • caiwenfeng_for_23
  • 2014-12-11 09:13:21
  • 11792

java中的Closeable接口

一、概述 该接口位于java.io包下,声明如下:public interface Closeable Closeable 是可以关闭的数据源或目标。调用 close 方法可释放对象保存的资源(...
  • u010142437
  • u010142437
  • 2014-12-21 23:16:16
  • 9602

AutoCloseable接口的使用

jdk1.7引入了资源自动关闭的接口AutoCloseable。一些资源也实现了该接口,如preparedStatement、Connection、InputStream、outputStream等等...
  • hetaolife
  • hetaolife
  • 2015-07-15 10:06:08
  • 8407

Java 日看一类(1)之IO包中的Bits

初学Java,每天辨析一个类的使用和对其用法进行讲解(可能无法做到很深层次的辨析,作者水平有限),以此来督促自己的学习。Bits类属于java的IO包其文件头的注释是这样写的:*Utility met...
  • github_37666068
  • github_37666068
  • 2018-02-10 13:03:27
  • 71

Java.io包中常用的类

Java.io包 Java.io.BufferedInputStream类实例 Java.io.BufferedOutputStream类使用例子 Java.io.BufferedReader类...
  • GarfieldEr007
  • GarfieldEr007
  • 2015-09-29 17:23:09
  • 1618

java-IO-基本概念

1.什么是IO       Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java...
  • youdianjinjin
  • youdianjinjin
  • 2016-07-30 15:33:33
  • 4041

JDK 1.7 java.io 源码学习之Closeable、Flushable、Appendable接口

Closeable、Flushable、Appendable
  • Rickesy
  • Rickesy
  • 2017-02-22 15:08:54
  • 973

java IO相关API探索之 AutoCloseable接口

从今天开始,要每天都坚持写一篇博客.每天都学习一点新知识,直到能够把java的API全部搞熟,搞透..量变引起质变,坚持下去总会有效果的.翻开jdk API,首先看到的是applet得API,因为只是...
  • maylorChao
  • maylorChao
  • 2014-11-30 23:17:17
  • 3360
收藏助手
不良信息举报
您举报文章:Java 日看一类(40)之IO包中的OutputStream类和Closeable接口
举报原因:
原因补充:

(最多只允许输入30个字)