最近在寫(xiě)一個(gè)小項(xiàng)目時(shí)用到了Java的序列化,在寫(xiě)入輸出流時(shí)用到了flush()
函數(shù)。網(wǎng)上搜了一下感覺(jué)講的不是很詳細(xì),在此寫(xiě)一下自己的理解
先給出代碼片段
// 第一種關(guān)閉資源方式
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{···}
// 第二種關(guān)閉資源方式
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 類用來(lái)序列化obj對(duì)象,并將該對(duì)象序列化到一個(gè)文件中。
我們給出了細(xì)微差別的兩段代碼,這兩段代碼的主要區(qū)別在于try代碼塊中關(guān)閉資源的方式不同。第二段代碼使用了close()
和flush()
方法來(lái)關(guān)閉輸出流和文件輸出流,而第一段代碼只是使用了close()
方法來(lái)關(guān)閉輸出流。
flush()
方法和close()
方法都可以用來(lái)關(guān)閉輸出流,但它們之間有一些區(qū)別。
flush()
方法可以將輸出流緩存中的內(nèi)容強(qiáng)制輸出,但并不會(huì)關(guān)閉輸出流,所以在調(diào)用flush()
方法之后,你仍然可以向輸出流中寫(xiě)入內(nèi)容。調(diào)用flush()
方法通常用于確保輸出流中的內(nèi)容被立即寫(xiě)入到目標(biāo)設(shè)備中,例如,你在寫(xiě)入數(shù)據(jù)后希望立即將數(shù)據(jù)發(fā)送給網(wǎng)絡(luò)或硬盤(pán)。如果沒(méi)有調(diào)用flush()
方法,寫(xiě)入的數(shù)據(jù)可能會(huì)被緩存,無(wú)法立即發(fā)送給目標(biāo)設(shè)備,從而導(dǎo)致一些問(wèn)題。
相比之下,close()
方法不僅會(huì)將輸出流緩存中的內(nèi)容強(qiáng)制輸出,還會(huì)關(guān)閉輸出流,所以在調(diào)用close()
方法之后,你不能再向輸出流中寫(xiě)入內(nèi)容。調(diào)用close()
方法通常用于釋放資源和關(guān)閉連接,例如,在使用網(wǎng)絡(luò)連接或文件輸出流時(shí),你需要在使用完畢之后關(guān)閉連接或文件輸出流,以釋放相關(guān)資源。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-451537.html
因此,如果你僅僅需要將輸出流緩存中的內(nèi)容強(qiáng)制輸出,并且仍然需要使用該輸出流,可以使用flush()
方法;如果你已經(jīng)完成了對(duì)輸出流的操作,并且需要釋放相關(guān)資源,應(yīng)該使用close()
方法。
以上文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-451537.html
到了這里,關(guān)于flush()函數(shù)用法詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!