在文件存储的逻辑上,二进制文件依据值编码,而不是字符编码,其占用空间小,读取/写入速度快,可是译码比较复杂,不运用数据同享。依据详细编码方法的不同,二进制的运用方法也有所不同,如对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*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所示。
图 13 获取test.dat文件的巨细
在Write To Binary File.vi和Read From Binary File.vi中,均包括一个byte order参数。这实际上便是常说的“巨细头”问题,比方U16占有2个字节,是前面的字节占高的内存地址,仍是后边的字节占高的内存地址。因为不同的操作渠道对该问题有不同的处理方法,因而运用时需求显式地指定,只需求写入和读取时一一对应即可,一般坚持默许值。
为了阐明数据结构对二进制文件的影响,本文将运用一个比较复杂的数据类型写入二进制文件,如图 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文件的字节巨细、位图画素、分辨率、色彩等相关信息。