flush()函数用法详解

最近在写一个小项目时用到了Java的序列化,在写入输出流时用到了flush()函数。网上搜了一下感觉讲的不是很详细,在此写一下自己的理解
先给出代码片段

// 第一种关闭资源方式
try {
            FileOutputStream fileOut =new FileOutputStream("temp.dat");
            ObjectOutput out = new ObjectOutputStream(fileOut);
            out.writeObject(obj);
            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
······
······
class obj implements Serializable{···}
// 第二种关闭资源方式
try {
            FileOutputStream fileOut =new FileOutputStream("temp.dat");
            ObjectOutput out = new ObjectOutputStream(fileOut);
            out.writeObject(obj);
            out.flush();
            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
······
······
class obj implements Serializable{···}

在以上代码中我们用ObjectOutputStream 类用来序列化obj对象,并将该对象序列化到一个文件中。

我们给出了细微差别的两段代码,这两段代码的主要区别在于try代码块中关闭资源的方式不同。第二段代码使用了close()flush()方法来关闭输出流和文件输出流,而第一段代码只是使用了close()方法来关闭输出流。

flush()方法和close()方法都可以用来关闭输出流,但它们之间有一些区别。

flush()方法可以将输出流缓存中的内容强制输出,但并不会关闭输出流,所以在调用flush()方法之后,你仍然可以向输出流中写入内容。调用flush()方法通常用于确保输出流中的内容被立即写入到目标设备中,例如,你在写入数据后希望立即将数据发送给网络或硬盘。如果没有调用flush()方法,写入的数据可能会被缓存,无法立即发送给目标设备,从而导致一些问题。

相比之下,close()方法不仅会将输出流缓存中的内容强制输出,还会关闭输出流,所以在调用close()方法之后,你不能再向输出流中写入内容。调用close()方法通常用于释放资源和关闭连接,例如,在使用网络连接或文件输出流时,你需要在使用完毕之后关闭连接或文件输出流,以释放相关资源。

因此,如果你仅仅需要将输出流缓存中的内容强制输出,并且仍然需要使用该输出流,可以使用flush()方法;如果你已经完成了对输出流的操作,并且需要释放相关资源,应该使用close()方法。
以上

你可能感兴趣的:(java,开发语言)