什么是计算机文件
內存中存放的數據在計算機關機后就會消失。要長久保存數據,就要使用硬盤、光盤、U 盤等設備。為了便于數據的管理和檢索,引入了“文件”的概念。
一篇文章、一段視頻、一個可執行程序,都可以被保存為一個文件,并賦予一個文件名。操作系統以文件為單位管理磁盤中的數據。
成千上萬個文件如果不加分類放在一起,用戶使用起來顯然非常不便,因此又引入了樹形目錄(目錄也叫文件夾)的機制,可以把文件放在不同的文件夾中,文件夾中還可以嵌套文件夾,這就便于用戶對文件進行管理和使用,正如 Windows 的資源管理器呈現的那樣。
一般來說,文件可分為文本文件、視頻文件、音頻文件、圖像文件、可執行文件等多種類別,這是從文件的功能進行分類的。從數據存儲的角度來說,所有的文件本質上都是一樣的,都是由一個個字節組成的,歸根到底都是 0、1 比特串。不同的文件呈現出不同的形態(有的是文本,有的是視頻等等),這主要是文件的創建者和解釋者(使用文件的軟件)約定好了文件格式。
所謂“格式”,就是關于文件中每一部分的內容代表什么含義的一種約定。例如,常見的純文本文件(也叫文本文件,擴展名通常是“.txt”),指的是能夠在 Windows 的“記事本”程序中打開,并且能看出是一段有意義的文字的文件。文本文件的格式可以用一句話來描述:文件中的每個字節都是一個可見字符的 ASCII 碼。
除了純文本文件外,圖像、視頻、可執行文件等一般被稱作“二進制文件”。二進制文件如果用“記事本”程序打開,看到的是一片亂碼。
所謂“文本文件”和“二進制文件”,只是約定俗成的、從計算機用戶角度出發進行的分類,并不是計算機科學的分類。因為從計算機科學的角度來看,所有的文件都是由二進制位組成的,都是二進制文件。文本文件和其他二進制文件只是格式不同而已。
實際上,只要規定好格式,而且不怕浪費空間,用文本文件一樣可以表示圖像、聲音、視頻甚至可執行程序。簡單地說,如果約定用字符 ‘1’、‘2’、…、‘7’ 表示七個音符,那么由這些字符組成的文本文件就可以被遵從該約定的音樂軟件演奏成一首曲子。
下面再看一個用文本文件表示一幅圖像的例子:一幅圖像實際上就是一個由點構成的矩陣,每個點可以有不同的顏色,稱為像素。有的圖像是 256 色的,有的是 32 位真彩色(即一 個像素的顏色用一個 32 位的整數表示)的。
以 256 色圖像為例,可以用 0~255 這 256 個數代表 256 種顏色,那么每個像素就可以用一個數來表示。再約定文件開始的兩個數代表圖像的寬度和高度(以像素為單位),則以下文本文件就可以表示一幅寬度為 6 像素、高度為 4 像素的 256 色圖像:
6 4
24 0 38 129 4 154
12 73 227 40 0 0
12 173 127 20 0 0
21 73 87 230 1 0
這個“文本圖像”文件的格式可以描述為:第一行的兩個數分別代表水平方向的像素數目和垂直方向的像素數目,此后每行代表圖像的一行像素,一行中的每個數對應于一個像素,表示其顏色。理解這一格式的圖像處理軟件就可以把上述文本文件呈現為一幅圖像。視頻是由每秒 24 幅圖像組成的,因此用文本文件也可以表示視頻。
上面用文本文件表示圖像的方法是非常低效的,浪費了太多的空間。文件中大量的空格是一種浪費。另外,常常要用 2 個甚至 3 個字符來表示一個像素,也造成大量浪費,因為用一個字節就足以表示 0~255 這 256 個數。因此,可以約定一個更節省空間的格式來表示一個 256 色的圖像,此種文件格式的描述如下:文件中的第 0 和第 1 個字節是整數 n,代表圖像的寬度(2 字節的 n 的取值范圍是 0~65 535,說明圖像最多只能是 65 535 個像素寬),第 2 和第 3 個字節代表圖像的高度。接下來,每 n 個字節表示圖像的一行像素,其中每個字節對應于一個像素的顏色。
用這種格式存儲 256 色圖像,比用上面的文本格式存儲圖像能夠大大節省空間。在“記事本”程序中打開它,看到的就會是亂碼,這個圖像文件也就是所謂的“二進制文件”。
真正的圖像文件、音頻文件、視頻文件的格式都比較復雜,有的還經過了壓縮,但只要文件的制作軟件和解讀軟件(如圖像查看軟件,音頻、視頻播放軟件)遵循相同的格式約定,用戶就可以在文件解讀軟件中看到文件的內容。
總結
- 上一篇: C++ 重载数学运算符
- 下一篇: C 时间函数