在文件存储的逻辑上,二进制文件基于值编码,而不是字符编码,其占用空间小,读取/写入速度快,可是译码比较复杂,不利用数据共享。根据具体编码方式的不一样,二进制的使用方式也有所不一样,如对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文件的字节大小、位图像素、分辨率、颜色等相关信息。