在文件存儲的邏輯上,二進制文件基於值編碼,而不是字符編碼,其佔用空間小,讀取/寫入速度快,可是譯碼比較複雜,不利用數據共享。根據具體編碼方式的不一樣,二進制的使用方式也有所不一樣,如對bmp格式,規定了文件各個字節段/塊的含義,只須要按照相應的編碼方式進行解碼就能夠獲得bmp文件的內容。所以,使用記事本是沒法查看bmp的內容的(沒法解碼bmp文件),只能使用專門的圖像查看軟件。事實上,任何程序員均可以按照本身的方式自定義二進制文件的編碼方式,並提供相應的解碼模塊將信息從二進制文件中提取出來便可。 與文本文件的讀寫方式相似,LabVIEW中的二進制文件的讀寫採用圖 10所示的兩個函數完成:「Write To Binary File」和「Read From Binary File」。這兩個函數是多態函數,能夠接受File Refnum和File Path兩種輸入。其使用方式也與文本文件的兩個VI相似,本文再也不贅述,僅僅說明其特殊的參數和使用方法。程序員
圖 10 File I/O選板數組
圖 11所示爲利用Write To Binary File.vi函數將一個數組以二進制文件存儲。首先,程序使用10次的FOR循環以產生0~9的數列並將其轉換爲U8類型的數組;而後將這個數組存入二進制文件中。圖 11所示爲利用Write To Binary File.vi函數將一個數組以二進制文件存儲。首先,程序使用10次的FOR循環以產生0~9的數列並將其轉換爲U8類型的數組;而後將這個數組存入二進制文件中。安全
圖 11 使用Write To Binary File.vi函數數據結構
若是計算該文件的大小,能夠很容易的獲得:10*1 Byte(U8)=10 Bytes,即10字節。打開該文件的「屬性」對話框,如圖 12所示,顯示文件大小爲14字節。那麼多餘的4字節是怎麼產生的呢?這與Write To Binary File.vi函數的「prepend array or string size (T)」參數有關,它表示當輸入端的數據類型是數組或字符串時是否在文件頭包含該數組的大小或字符串的長度,默認是True。該長度經過一個32 bits(4 Bytes)的整型表示,所以當往二進制文件中寫入數組和字符串時,能夠決定是否須要將大小和長度信息寫入文件頭。函數
圖 12 test.dat文件屬性編碼
從上面可知,經過讀取test.dat文件的前4個字節獲取字符串的長度或數組的大小,如圖 13所示3d
圖 13 獲取test.dat文件的大小指針
在Write To Binary File.vi和Read From Binary File.vi中,均包含一個byte order參數。這實際上就是常說的「大小頭」問題,好比U16佔有2個字節,是前面的字節佔高的內存地址,仍是後面的字節佔高的內存地址。因爲不一樣的操做平臺對該問題有不一樣的處理方式,所以使用時須要顯式地指定,只須要寫入和讀取時一一對應便可,通常保持默認值。blog
爲了說明數據結構對二進制文件的影響,本文將使用一個比較複雜的數據類型寫入二進制文件,如圖 14所示。實例中使用簇的數組類型,在簇中依次包含了double、string、I32和2個I32型數據組成的數組元素。內存
圖 14 寫入二進制文件
根據LabVIEW數據類型的定義方式,能夠計算單個簇元素的大小是:8 Bytes(double)+5 Byte(string,其中4個字節表示字符串長度)+4 Bytes(I32)+12 Bytes(Array of I32,其中4個字節表示數組的長度)=29 Bytes,整個文件的大小是29 Bytes*10+4 Bytes(表示數組的長度)=294 Bytes。所以,test.dat文件的格式如圖 15所示
圖 15 test.dat文件的格式
根據圖 15的文件組成,能夠獲取數組的第6個簇元素的值,如圖 16所示。首先讀取test.dat的前4個字節獲取整個數組的長度;而後,將文件指針移動到第6個元素的開頭;最後,讀取第6個數據元素便可獲得數組中的第6個元素。顯然,若是程序員不知道test.dat中的字節存儲狀況,是沒法獲取第6個元素值的
圖 16 獲取test.dat文件中數組的第6個元素
綜上所述,二進制文件因爲其高速、高效的特色在高速流盤、安全存取方面應用普遍。同時,因爲其沒法被經常使用的字符處理程序直接讀取,所以沒法便捷地查看數據,而只能經過專用的應用程序讀取。此外,對特有的數據結構而言,二進制文件須要很是瞭解該數據結構的內存佔用狀況纔可以準確檢索和定位。
一般,爲了識別二進制的基本信息,程序員每每會在文件的頭部增長一些基本的頭文件信息,用來描述文件的組成。如bmp格式文件在頭部使用14個字節表示文件信息以及40個字節表示位圖信息,這些信息使得程序員能夠快速地獲取bmp文件的字節大小、位圖像素、分辨率、顏色等相關信息。