Ⅰ 用fprintf和fscanf函數讀寫文件的過程中需要經過緩存嗎
默認情況下是需要的
如果要不經過緩存而直接讀寫,你可以用 setvbuf 函數設置 _IONBF
Ⅱ java中如何使用緩沖區對文件進行讀寫操作
首先,了解下什麼是緩沖區:
電腦內存分成5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
棧——就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的存儲區。裡面的變數通常是局部變數、函數參數等。
堆——就是那些由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete.如果程序員沒有釋放掉,那麼在程序結束後,操作系統會自動回收。
自由存儲區——就是那些由malloc等分配的內存塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。
全局/靜態存儲區——全局變數和靜態變數被分配到同一塊內存中,在以前的c語言中,全局變數又分為初始化的和未初始化的,在C++裡面沒有這個區分了,他們共同佔用同一塊內存區。
常量存儲區,這是一塊比較特殊的存儲區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改)
電腦緩沖區就是預留下來的做為急用的那一部分,為暫時置放輸出或輸入資料的內存。
如何對緩沖區進行操作:
當我們讀寫文本文件的時候,採用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的類是InputStreamReader, 它是位元組轉換為字元的橋梁。你可以在構造器重指定編碼的方式,如果不指定的話將採用底層操作系統的默認編碼方式,例如GBK等。使用FileReader讀取文件:
FileReader fr = new FileReader("ming.txt");
int ch = 0;
while((ch = fr.read())!=-1 )
{
System.out.print((char)ch);
}
其中read()方法返回的是讀取得下個字元。當然你也可以使用read(char[] ch,int off,int length)這和處理二進制文件的時候類似。
事實上在FileReader中的方法都是從InputStreamReader中繼承過來的。read()方法是比較好費時間的,如果為了提高效率我們可以使用BufferedReader對Reader進行包裝,這樣可以提高讀取得速度,我們可以一行一行的讀取文本,使用readLine()方法。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data);
}
了解了FileReader操作使用FileWriter寫文件就簡單了,這里不贅述。
Eg.我的綜合實例:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class testFile {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// file(內存)----輸入流---->【程序】----輸出流---->file(內存)
File file = new File("d:/temp", "addfile.txt");
try {
file.createNewFile(); // 創建文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 向文件寫入內容(輸出流)
String str = "親愛的小南瓜!";
byte bt[] = new byte[1024];
bt = str.getBytes();
try {
FileOutputStream in = new FileOutputStream(file);
try {
in.write(bt, 0, bt.length);
in.close();
// boolean success=true;
// System.out.println("寫入文件成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
// 讀取文件內容 (輸入流)
FileInputStream out = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(out);
int ch = 0;
while ((ch = isr.read()) != -1) {
System.out.print((char) ch);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
Ⅲ C語言中,什麼是緩沖文件系統和文件緩沖區
目前c語言使用的文件系統分為緩沖文件系統(標准i
/
o)和非緩沖文件系統(系統i
/
o)。緩沖文件系統的特點是:在內存開辟一個「緩沖區」,為程序中的每一個文件使用,當執
行讀文件的操作時,從磁碟文件將數據先讀入內存「緩沖區」,裝滿後再從內存「緩沖區」依此讀入接收的變數。執行寫文件的操作時,先將數據寫入內存「緩沖區」,待內存「緩沖區」裝滿後再寫入文件。
因此當程序運行時雖然進行了寫數據操作,但是如果寫入的數據沒有裝滿內存中的緩沖區,就不會將數據寫入到磁碟文件中。當程序運行結束後,系統就會將緩沖區中的數據寫入到磁碟上的文件中,因此就可以看到文件中的內容。
常用的fopen命令就會使用文件讀寫緩沖區,fclose命令關閉文件,把緩沖區中的內容寫入磁碟上的文件中。詳見:
http://study.qqcf.com/web/171/19812.htm
Ⅳ 關於java文件讀寫 通道與緩存區讀寫方式 與 流讀寫方式 性能效率對比
緩沖區合通道進行讀寫文件效率要高些,像搬運東西一樣,n多物件放倒貨車上一次就搬走,而流的方式是,每搬一次,往返一趟。
Ⅳ 硬碟的連續讀寫、隨機讀寫、緩存,在實際使用中,各體現在什麼方面
連續讀寫主要體現在復制大量文件或者說是復制少量但是容量比較大的文件的速度。
而隨機讀寫則主要體現在操作系統本身運行過程中(操作系統運行中有大量的隨機讀寫)
而緩存則是一種預讀機制,緩存越大,操作系統在調取一些使用頻率較高的文件時會預先載入到緩存中。