本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,特別涉及一種文件讀寫方法及系統(tǒng)。
背景技術(shù):
目前,java提供的文件隨機(jī)訪問類randomaccessfile訪問文件時直接讀寫磁盤,在高頻率的小范圍隨機(jī)讀寫時受限于磁盤io瓶頸,整體性能偏低,而且java本身的緩沖讀寫類又只能順序訪問文件。
在現(xiàn)有的離線系統(tǒng)中,普遍存在大量的對單文件的隨機(jī)讀寫操作。由于randomaccessfile類本身的低效率,嚴(yán)重影響了離線系統(tǒng)文件操作的效率,進(jìn)而造成整個離線系統(tǒng)的吞吐量下降,無法滿足客戶的使用需要。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種能夠在java環(huán)境下高效率隨機(jī)訪問文件的文件讀寫方法,讀寫文件時,依據(jù)訪問的位置,在內(nèi)存中開辟緩沖窗口,預(yù)先讀取緩沖窗口覆蓋的內(nèi)容,后續(xù)的讀寫訪問有很大概率是落在緩沖窗口中,這樣就把多次磁盤io轉(zhuǎn)化成了一次磁盤io加多次內(nèi)存訪問,大大提高訪問效率。
本發(fā)明提供的文件讀寫方法,包括以下步驟:
響應(yīng)于外部應(yīng)用的文件讀寫訪問請求,根據(jù)訪問的位置,在內(nèi)存中開辟緩沖窗口;
判斷所要讀寫的文件內(nèi)容長度是否大于所述緩沖窗口的長度;
當(dāng)文件內(nèi)容長度大于所述緩沖窗口的長度時,將所述緩沖窗口中的數(shù)據(jù)寫入磁盤,從磁盤中直接讀寫文件,并在讀寫結(jié)束位置開辟新的緩沖窗口;
當(dāng)文件內(nèi)容長度小于或等于所述緩沖窗口的長度時,根據(jù)文件的開始位置,動態(tài)調(diào)整所述緩沖窗口的位置,從所述緩沖窗口中讀寫文件。
作為一種可實施方式,所述當(dāng)文件內(nèi)容長度小于或等于所述緩沖窗口的長度時,根據(jù)文件的開始位置,動態(tài)調(diào)整所述緩沖窗口的位置,從所述緩沖窗口中讀寫文件,包括以下步驟:
當(dāng)所要讀取的文件內(nèi)容小于或等于所述緩沖窗口的長度時,判斷讀開始位置;
當(dāng)所述讀開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處讀取文件;
當(dāng)所述讀開始位置位于所述緩沖窗口外部時,在所述讀開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后從所述新的緩沖窗口中讀取文件。
作為一種可實施方式,所述當(dāng)文件內(nèi)容長度小于或等于所述緩沖窗口的長度時,根據(jù)文件的開始位置,動態(tài)調(diào)整所述緩沖窗口的位置,從所述緩沖窗口中讀寫文件,包括以下步驟:
當(dāng)所要寫入的文件內(nèi)容小于或等于所述緩沖窗口的長度時,判斷寫開始位置;
當(dāng)所述寫開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處寫入文件;
當(dāng)所述寫開始位置位于所述緩沖窗口外部時,則從寫開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后將文件寫入所述新的緩沖窗口。
作為一種可實施方式,當(dāng)所述讀開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處讀取文件之后,還包括以下步驟:
當(dāng)所述緩沖窗口內(nèi)的數(shù)據(jù)不足時,先將所述緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,從新的緩沖窗口中讀取剩余文件。
作為一種可實施方式,當(dāng)所述寫開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處寫入文件之后,還包括以下步驟:
當(dāng)待寫數(shù)據(jù)超出所述緩沖窗的范圍時,先將所述緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,將待寫數(shù)據(jù)寫入所述新的緩沖窗口。
相應(yīng)地,本發(fā)明還提供一種文件讀寫系統(tǒng),包括訪問響應(yīng)模塊、長度判斷模塊、第一讀寫模塊以及第二讀寫模塊;
所述訪問響應(yīng)模塊,用于響應(yīng)于外部應(yīng)用的文件讀寫訪問請求,根據(jù)訪問的位置,在內(nèi)存中開辟緩沖窗口;
所述長度判斷模塊,用于判斷所要讀寫的文件內(nèi)容長度是否大于所述緩沖窗口的長度;
所述第一讀寫模塊,用于當(dāng)文件內(nèi)容長度大于所述緩沖窗口的長度時,將所述緩沖窗口中的數(shù)據(jù)寫入磁盤,從磁盤中直接讀寫文件,并在讀寫結(jié)束位置開辟新的緩沖窗口;
所述第二讀寫模塊,用于當(dāng)文件內(nèi)容長度小于或等于所述緩沖窗口的長度時,根據(jù)文件的開始位置,動態(tài)調(diào)整所述緩沖窗口的位置,從所述緩沖窗口中讀寫文件。
作為一種可實施方式,所述第二讀寫模塊包括讀開始位置判斷單元、第一讀取單元以及第二讀取單元;
所述讀開始位置判斷單元,用于當(dāng)所要讀取的文件內(nèi)容小于或等于所述緩沖窗口的長度時,判斷讀開始位置;
所述第一讀取單元,用于當(dāng)所述讀開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處讀取文件;
所述第二讀取單元,用于當(dāng)所述讀開始位置位于所述緩沖窗口外部時,在所述讀開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后從所述新的緩沖窗口中讀取文件。
作為一種可實施方式,所述第二讀寫模塊包括寫開始位置判斷單元、第一寫入單元以及第二寫入單元;
所述寫開始位置判斷單元,用于當(dāng)所要寫入的文件內(nèi)容小于或等于所述緩沖窗口的長度時,判斷寫開始位置;
所述第一寫入單元,用于當(dāng)所述寫開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處寫入文件;
所述第二寫入單元,用于當(dāng)所述寫開始位置位于所述緩沖窗口外部時,則從寫開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后將文件寫入所述新的緩沖窗口。
作為一種可實施方式,所述第一讀取單元還用于在所述讀開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處讀取文件之后,當(dāng)所述緩沖窗口內(nèi)的數(shù)據(jù)不足時,先將所述緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,從新的緩沖窗口中讀取剩余文件。
作為一種可實施方式,所述第一寫入單元還用于在所述寫開始位置位于所述緩沖窗口內(nèi)時,直接從所述緩沖窗口映射的位置處寫入文件之后,當(dāng)待寫數(shù)據(jù)超出所述緩沖窗的范圍時,先將所述緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,將待寫數(shù)據(jù)寫入所述新的緩沖窗口。
本發(fā)明相比于現(xiàn)有技術(shù)的有益效果在于:
本發(fā)明提供的文件讀寫方法及系統(tǒng),通過在內(nèi)存中開辟緩沖窗口,在訪問的文件內(nèi)容超出緩沖窗口范圍時,將原緩沖窗口內(nèi)容與磁盤文件同步,并在新位置重新開辟緩沖窗口;在訪問的文件內(nèi)容未超出緩沖窗口的范圍時,根據(jù)文件的開始位置,動態(tài)調(diào)整緩沖窗口的位置,從緩沖窗口中讀寫文件。本發(fā)明提供的文件讀寫方法及系統(tǒng),利用緩沖窗口,極大的提高了文件讀寫的效率,尤其是大文件頻繁隨機(jī)讀寫時的訪問效率。
附圖說明
圖1為本發(fā)明實施例一提供的文件讀寫方法的流程示意圖;
圖2為本發(fā)明實施例提供的文件打開流程示意圖;
圖3為本發(fā)明實施例二提供的讀取文件的流程示意圖;
圖4為本發(fā)明實施例三提供的寫入文件的流程示意圖;
圖5為本發(fā)明實施例提供的關(guān)閉文件流程示意圖;
圖6為本發(fā)明實施例四提供的文件讀寫系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
以下結(jié)合附圖,對本發(fā)明上述的和另外的技術(shù)特征和優(yōu)點進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明的部分實施例,而不是全部實施例。
參見圖1,本發(fā)明實施例一提供了一種文件讀寫方法,包括以下步驟:
s100、響應(yīng)于外部應(yīng)用的文件讀寫訪問請求,根據(jù)訪問的位置,在內(nèi)存中開辟緩沖窗口;
s200、判斷所要讀寫的文件內(nèi)容長度是否大于緩沖窗口的長度;
s300、當(dāng)文件內(nèi)容長度大于緩沖窗口的長度時,將緩沖窗口中的數(shù)據(jù)寫入磁盤,從磁盤中直接讀寫文件,并在讀寫結(jié)束位置開辟新的緩沖窗口;
s400、當(dāng)文件內(nèi)容長度小于或等于緩沖窗口的長度時,根據(jù)文件的開始位置,動態(tài)調(diào)整緩沖窗口的位置,從緩沖窗口中讀寫文件。
本實施例在讀寫文件時,依據(jù)訪問的位置,在內(nèi)存中開辟緩沖窗口,預(yù)先讀取窗口覆蓋的內(nèi)容,后續(xù)的讀寫訪問有很大概率是落在緩沖窗口中,這樣就把多次磁盤io轉(zhuǎn)化成了一次磁盤io加多次內(nèi)存訪問,從而提高訪問效率。
在訪問的文件內(nèi)容超出緩沖窗口范圍時,將原緩沖窗口內(nèi)容與磁盤文件同步,并在新位置重新開辟緩沖窗口;在訪問的文件內(nèi)容未超出緩沖窗口的范圍時,根據(jù)文件的開始位置,動態(tài)調(diào)整緩沖窗口的位置,從緩沖窗口中讀寫文件。利用緩沖窗口,極大的提高了文件讀寫的效率,尤其是大文件頻繁隨機(jī)讀寫時的訪問效率。
在讀寫文件之前,首先要打開或者創(chuàng)建文件。
進(jìn)一步地,參見圖2,在步驟s100之前,打開或創(chuàng)建文件時的流程為:
s110、打開原始文件,得到文件句柄;
s120、將文件頭部前8192字節(jié)數(shù)據(jù)讀入內(nèi)存(若是創(chuàng)建新文件則只開辟內(nèi)存),記錄文件指針位置;
s130、返回文件句柄。
文件訪問通常包括讀取和寫入兩種機(jī)制,下面分別針對這兩種機(jī)制對本發(fā)明的實現(xiàn)過程進(jìn)行說明。
參見圖3,本發(fā)明實施例二提供了一種讀取文件的方法,流程如下:
s20、外部應(yīng)用發(fā)起讀請求;
s21、如果要讀取的文件內(nèi)容的長度大于緩沖窗口的長度,則先將緩沖窗口中的內(nèi)容(即數(shù)據(jù))寫入磁盤,然后從磁盤中直接讀取文件,并在讀結(jié)束位置開辟新的緩沖窗口;
由于預(yù)先開辟的緩沖窗口用于讀取或?qū)懭胛募?,所以?dāng)要讀取的文件內(nèi)容的長度大于緩沖窗口的長度,先將緩沖窗口中的內(nèi)容(此前寫入的數(shù)據(jù))寫入磁盤進(jìn)行存儲,然后從磁盤中直接讀取文件,并在讀結(jié)束位置開辟新的緩沖窗口,留給后續(xù)文件讀寫使用。
s22、當(dāng)所要讀取的文件內(nèi)容小于或等于緩沖窗口的長度時,判斷讀開始位置;
s23、當(dāng)讀開始位置位于緩沖窗口內(nèi)時,直接從緩沖窗口映射的位置處讀取文件;當(dāng)緩沖窗口內(nèi)的數(shù)據(jù)不足時,先將緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,從新的緩沖窗口中讀取剩余文件。
s24、讀開始位置不在窗口內(nèi)的,即讀開始位置位于緩沖窗口外部時,在讀開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后從新的緩沖窗口中讀取文件。
參見圖4,本發(fā)明實施例三提供了一種寫入文件的方法,流程如下:
s30、外部應(yīng)用發(fā)起寫請求;
s31、如果要寫入的文件內(nèi)容的長度大于緩沖窗口的長度,則先將緩沖窗口中的內(nèi)容(即數(shù)據(jù))寫入磁盤,然后直接向磁盤中寫入文件,并在寫結(jié)束位置開辟新的緩沖窗口;
由于預(yù)先開辟的緩沖窗口用于讀取或?qū)懭胛募?,所以?dāng)要寫入的文件內(nèi)容的長度大于緩沖窗口的長度,先將緩沖窗口中的內(nèi)容(此前寫入的數(shù)據(jù))同步到磁盤進(jìn)行存儲,然后直接寫文件到磁盤中,并在寫結(jié)束位置開辟新的緩沖窗口,留給后續(xù)文件讀寫使用。
s32、當(dāng)所要寫入的文件內(nèi)容小于或等于緩沖窗口的長度時,判斷寫開始位置;
s33、當(dāng)寫開始位置位于緩沖窗口內(nèi)時,直接從緩沖窗口映射的位置處寫入文件;當(dāng)待寫數(shù)據(jù)超出緩沖窗的范圍時,先將緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,將待寫數(shù)據(jù)寫入新的緩沖窗口;
s24、讀開始位置不在緩沖窗口內(nèi)的,即寫開始位置位于緩沖窗口外部時,則從寫開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后將文件寫入新的緩沖窗口。
進(jìn)一步地,參見圖5,在步驟s300和s400之后,關(guān)閉文件時的流程為:
s510、將緩沖窗口內(nèi)容寫入磁盤;
s520、關(guān)閉文件句柄。
基于統(tǒng)一發(fā)明構(gòu)思,本發(fā)明還提供了一種文件讀寫系統(tǒng),該系統(tǒng)的原理與前述文件讀寫方法相同,故系統(tǒng)的實施可參照上述方法實現(xiàn)。
參見圖6,本發(fā)明實施例四提供的文件讀寫系統(tǒng),包括訪問響應(yīng)模塊100、長度判斷模塊200、第一讀寫模塊300以及第二讀寫模塊400;
訪問響應(yīng)模塊100用于響應(yīng)于外部應(yīng)用的文件讀寫訪問請求,根據(jù)訪問的位置,在內(nèi)存中開辟緩沖窗口;
長度判斷模塊200用于判斷所要讀寫的文件內(nèi)容長度是否大于緩沖窗口的長度;
第一讀寫模塊300用于當(dāng)文件內(nèi)容長度大于緩沖窗口的長度時,將緩沖窗口中的數(shù)據(jù)寫入磁盤,從磁盤中直接讀寫文件,并在讀寫結(jié)束位置開辟新的緩沖窗口;
第二讀寫模塊400用于當(dāng)文件內(nèi)容長度小于或等于緩沖窗口的長度時,根據(jù)文件的開始位置,動態(tài)調(diào)整緩沖窗口的位置,從緩沖窗口中讀寫文件。
作為一種可實施方式,第二讀寫模塊包括讀開始位置判斷單元、第一讀取單元以及第二讀取單元;
讀開始位置判斷單元,用于當(dāng)所要讀取的文件內(nèi)容小于或等于緩沖窗口的長度時,判斷讀開始位置;
第一讀取單元,用于當(dāng)讀開始位置位于緩沖窗口內(nèi)時,直接從緩沖窗口映射的位置處讀取文件;
第二讀取單元,用于當(dāng)讀開始位置位于緩沖窗口外部時,在讀開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后從新的緩沖窗口中讀取文件。
作為一種可實施方式,第二讀寫模塊包括寫開始位置判斷單元、第一寫入單元以及第二寫入單元;
寫開始位置判斷單元,用于當(dāng)所要寫入的文件內(nèi)容小于或等于緩沖窗口的長度時,判斷寫開始位置;
第一寫入單元,用于當(dāng)寫開始位置位于緩沖窗口內(nèi)時,直接從緩沖窗口映射的位置處寫入文件;
第二寫入單元,用于當(dāng)寫開始位置位于緩沖窗口外部時,則從寫開始位置開辟新的緩沖窗口,讀入文件內(nèi)容,然后將文件寫入新的緩沖窗口。
作為一種可實施方式,第一讀取單元還用于在讀開始位置位于緩沖窗口內(nèi)時,直接從緩沖窗口映射的位置處讀取文件之后,當(dāng)緩沖窗口內(nèi)的數(shù)據(jù)不足時,先將緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,從新的緩沖窗口中讀取剩余文件。
作為一種可實施方式,第一寫入單元還用于在寫開始位置位于緩沖窗口內(nèi)時,直接從緩沖窗口映射的位置處寫入文件之后,當(dāng)待寫數(shù)據(jù)超出緩沖窗的范圍時,先將緩沖窗口中的數(shù)據(jù)同步寫入磁盤,再開辟新的緩沖窗口,將待寫數(shù)據(jù)寫入新的緩沖窗口。
本發(fā)明通過在內(nèi)存中開辟緩沖窗口,隨著文件的使用過程,動態(tài)調(diào)整緩沖窗口的位置,從緩沖窗口中讀寫文件。利用緩沖窗口,極大的提高了文件讀寫的效率,尤其是大文件頻繁隨機(jī)讀寫時的訪問效率。
以上所描述的系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本公開方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步的詳細(xì)說明,應(yīng)當(dāng)理解,以上所述僅為本發(fā)明的具體實施例而已,并不用于限定本發(fā)明的保護(hù)范圍。特別指出,對于本領(lǐng)域技術(shù)人員來說,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。