通過緩衝區讀檔案和非緩衝區讀檔案有什麼區別

2023-01-19 09:20:29 字數 4356 閱讀 5359

1樓:匿名使用者

主要是為了速度而設定緩衝區,這樣可以減少對外存的i/o,一提高訪問速度,而可以保護外存。

還有個區別是掉電區別,緩衝區的資料掉電時可就丟失了。因此要注意定時回寫外存。

什麼是檔案緩衝區

2樓:最強大腦花

根據應用程式對檔案的訪問方式,即是否存在緩衝區,對檔案的訪問可以分為帶緩衝區的操作和非緩衝區的檔案操作:

緩衝區檔案操作:高階檔案系統,將在使用者空間中自動為正在使用的檔案開闢記憶體緩衝區。

非緩衝區檔案系統:低階檔案系統,如果需要,只能由使用者在自己的程式中為每個檔案設定緩衝區。

如果採用非緩衝的檔案訪問方式,每次對該檔案進行一次讀寫操作時,都需要使用讀寫檔案系統掉用來處理該操作,因此,如果使用者需要訪問某個磁碟檔案,則每訪問一次都要執行一次系統呼叫,執行一次系統呼叫將涉及到cpu狀態的切換,即從使用者空間切換到核心空間,實現上下文的切換,這將損耗一定的cpu時間,頻繁的磁碟訪問對程式的執行效率造成很大的影響。

ansi標準c庫函式建立在底層系統呼叫之上,即c函式庫檔案訪問函式的實現中使用了低階檔案i/o系統呼叫,ansi標準c庫中的檔案處理函式為了減少使用系統呼叫的次數,提高效率,根據應用的不同,採用緩衝區機制,這樣,在對磁碟檔案進行讀操作時,可以一次從檔案中讀出大量的資料到緩衝區中,以後對這部風的訪問就不需要在使用系統呼叫了,即只需要少量的cpu狀態切換。在對檔案進行寫操作時,可以先將內容存在緩衝區,待檔案寫滿後,或者確實需要更新時在呼叫系統呼叫將檔案一次寫入到磁碟中。

j**a中如何使用緩衝區對檔案進行讀寫操作?

j**a.io中 為什麼帶緩衝的位元組輸入輸出流速度比不帶緩衝的速度快

3樓:匿名使用者

就跟你複製檔案到u盤裡一個意思,你是一個檔案一個檔案複製到u盤裡快呢。還是把所有檔案放在一個資料夾裡,再黏貼過去。這個資料夾就是緩衝區,你覺得哪個快。

4樓:匿名使用者

當bufferedreader在讀取文字檔案時,會先儘量從檔案中讀入字元資料並置入緩衝區,如果緩衝區資料不足,才會再從檔案中讀取。這裡的緩衝區應該是在硬碟中

使用bufferedwriter時,寫入的資料並不會先輸出到目的地,而是先儲存至緩衝區中。如果緩衝區中的資料滿了,才會一次對目的地進行寫出。這裡的快取區應該在記憶體中。

5樓:封祿

比如 正常情況水桶掛在水龍頭上接水一滴一滴接,緩衝的話就好像拿個盆,先從水龍頭接水,接滿一盆再倒入桶裡;

6樓:匿名使用者

因為採用緩衝解放了cpu的部分負擔,避免cpu中斷,使得操作更加連續。

7樓:

原理:通過將位元組緩衝到記憶體然後到磁碟比直接通過程式輸出到磁碟要快。

緩衝:就是通過緩衝流操作位元組讀或寫入記憶體。

在記憶體中就是以流的形式輸出。

總結:從記憶體讀取資料比從磁碟讀取資料要快。

c語言中,什麼是緩衝檔案系統和檔案緩衝區?

8樓:匿名使用者

目前c語言使用的檔案系統分為緩衝檔案系統(標準i / o)和非緩衝檔案系統(系統i / o)。緩衝檔案系統的特點是:在記憶體開闢一個「緩衝區」,為程式中的每一個檔案使用,當執 行讀檔案的操作時,從磁碟檔案將資料先讀入記憶體「緩衝區」,裝滿後再從記憶體「緩衝區」依此讀入接收的變數。

執行寫檔案的操作時,先將資料寫入記憶體「緩衝區」,待記憶體「緩衝區」裝滿後再寫入檔案。 因此當程式執行時雖然進行了寫資料操作,但是如果寫入的資料沒有裝滿記憶體中的緩衝區,就不會將資料寫入到磁碟檔案中。當程式執行結束後,系統就會將緩衝區中的資料寫入到磁碟上的檔案中,因此就可以看到檔案中的內容。

常用的fopen命令就會使用檔案讀寫緩衝區,fclose命令關閉檔案,把緩衝區中的內容寫入磁碟上的檔案中。詳見: http:

9樓:匿名使用者

c語言裡面沒有這樣的概念.

這個是屬於作業系統的範疇.

檔案io和標準io有什麼區別

10樓:一騎當後

先來了解下什麼是標準io以及檔案io。

標準io:標準i/o是ansi c建立的一個標準i/o模型,是一個標準函式包和stdio.h標頭檔案中的定義,具有一定的可移植性。

標準io庫處理很多細節。例如快取分配,以優化長度執行io等。標準的io提供了三種型別的快取。

(1)全快取:當填滿標準io快取後才進行實際的io操作。 (2)行快取:當輸入或輸出中遇到新行符時,標準io庫執行io操作。 (3)不帶快取:stderr就是了。

檔案io:檔案io稱之為不帶快取的io(unbuffered i/o)。不帶快取指的是每個read,write都呼叫核心中的一個系統呼叫。

也就是一般所說的低階i/o——作業系統提供的基本io服務,與os繫結,特定於linix或unix平臺。

2區別首先:兩者一個顯著的不同點在於,標準i/o預設採用了緩衝機制,比如呼叫fopen函式,不僅開啟一個檔案,而且建立了一個緩衝區(讀寫模式下將建立兩個緩衝區),還建立了一個包含檔案和緩衝區相關資料的資料結構。低階i/o一般沒有采用緩衝,需要自己建立緩衝區,不過其實在linix或unix系統中,都是有使用稱為核心緩衝的技術用於提高效率,讀寫呼叫是在核心緩衝區和程序緩衝區之間進行的資料複製。

其次從操作的裝置上來區分,檔案i/o主要針對檔案操作,讀寫硬碟等,它操作的是檔案描述符,標準i/o針對的是控制檯,列印輸出到螢幕等,它操作的是字元流。對於不同裝置得特性不一樣,必須有不同api訪問才最高效。

11樓:匿名使用者

標準io與檔案io 的不同之處,先來說說標準io:標準i/o是ansi c建立的一個標準i/o模型,是一個標準函式包和stdio.h標頭檔案中的定義,具有一定的可移植性。

標準io庫處理很多細節。例如快取分配,以優化長度執行io等。標準的io提供了三種型別的快取。

(1)全快取:當填滿標準io快取後才進行實際的io操作。 (2)行快取:

當輸入或輸出中遇到新行符時,標準io庫執行io操作。 (3)不帶快取:stderr就是了。

檔案io:檔案io稱之為不帶快取的io(unbuffered i/o)。不帶快取指的是每個read,write都呼叫核心中的一個系統呼叫。

也就是一般所說的低階i/o——作業系統提供的基本io服務,與os繫結,特定於linix或unix平臺。

2不同的地方

首先:兩者一個顯著的不同點在於,標準i/o預設採用了緩衝機制,比如呼叫fopen函式,不僅開啟一個檔案,而且建立了一個緩衝區(讀寫模式下將建立兩個緩衝區),還建立了一個包含檔案和緩衝區相關資料的資料結構。低階i/o一般沒有采用緩衝,需要自己建立緩衝區,不過其實在linix或unix系統中,都是有使用稱為核心緩衝的技術用於提高效率,讀寫呼叫是在核心緩衝區和程序緩衝區之間進行的資料複製。

其次從操作的裝置上來區分,檔案i/o主要針對檔案操作,讀寫硬碟等,它操作的是檔案描述符,標準i/o針對的是控制檯,列印輸出到螢幕等,它操作的是字元流。對於不同裝置得特性不一樣,必須有不同api訪問才最高效。

軟體開發專業閘道器注,其實最重要的還是他們各自的函式了;

雙執行緒拷貝: 同步讀寫,一個執行緒用來讀資料,一個用寫資料;

12樓:

我們來玩個新東西把!微軟的rx(reactive extensions)非同步程式設計模型,你這要求用這玩意做到方便

核心**:(沒有文字,所以我這裡模擬讀取資料部分,你可以自己補齊全檔案讀寫部分,其他詳細部分,參考附件專案,)

var realsource = observable.fromevent(a => real.ondata += a, a => real.ondata -= a);

// 每兩秒生成假資料的可觀察源

var dummysource = observable.interval(timespan.fromseconds(2))

.select(_ => new mydata );

var n = 5;

// 合併真假源,取每1s的時間視窗內的資料,如果存在真資料,就把假資料剔除(這樣理論上相鄰資料之間的間隔不會超過3s)

// 快取每n秒的資料訂閱輸出(一次寫多條資料到資料庫效能好點)

var sub = realsource.merge(dummysource).buffer(timespan.

fromseconds(1)).selectmany(buf =>

).buffer(timespan.fromseconds(n)).subscribe(buf =>

});real.start(); // 啟動真實資料接收

我們投資被欺騙了,造成嚴重損失,對方把緩衝區開發魚塘發包給我們一年後不給養殖了,造成嚴重後果怎麼辦

可以拿著合同要求他賠償損失,如果不行就法律程式。千萬不要過激行為,那樣就得不償失了。如果籤合同的話可以告他的 投資養殖受法律保護嗎?投資養殖業是受到法律保護了,任何行業都受法法律保 受法律保護的,只要是國家頒佈的,都受保護 任何合法的投資都受法律保護。養殖本身不違法,那投資就不違法。你在這裡問這個問...

51微控制器程式設計如何將串列埠緩衝區中的資料儲存為陣列格式

可以用軟體程式設計實現,可以參考 char a 4 if ri ri 0 a 4 sbuf i 將一個陣列存入資料庫和使用的語言有關係。通常的做法是將陣列的內容轉換後傳遞到和語言相關的資料處理方法中進行處理。涉及到的資料轉換的方法 1 可以轉換為json格式 2 可以轉換為xml12 資料處理方法解...

通過讀《周昭王的故事》有什麼感悟

周昭王十六年,約在公元前980年,周昭王為了教訓已經不再順從自己的楚國,親領大軍首次討伐楚國。強大的周軍越過被當時視為天塹的漢水向荊楚腹地挺進。楚國雖較立國之初,已經有了很大的發展,軍事實力與以前相比,也有了很大進步,但是卻難以阻擋周王朝軍隊進攻的鐵蹄,周軍勢如破竹,所向披靡。以強攻弱,以大攻小,周...