DBF文件格式
1. GeoTools DBF文件头计算
DBF头文件分为两个部分。第1部分占10个字节,保存文件标识、时间、数据量和DBF文件头字节长度;第2部分为变长长度,描述了每行数据长度、字段名、字段类型、列号和其它。
第一部分:
第一部分占用10个字节:
- 0 字节为值为3,标识位,固定值
-
1~3分别标识年月日
- if y > 90 y = y+1990 else y = y+2000
- M = M -1
- d = d
- 4~7 标识dbf文件存储了多少条数据,
int recordCnt =[7][6][5][4]
- 8~9 标识头长度
int headerLength =[8] & 255 | ([9] & 255) << 8
第二部分:
第二部分的长度依据文件字段数,根据第一部分的内容可计算:
- 数据长度(2B)
int recordLength = [0] & 255 | ([1] & 255) << 8
- 空位(20B),用0填充
-
字段描述,每个(32B)*n
- 字段名(11B)
- 类型(1B)
- 列号(1B),标识该字段在第几列
- 长度(1B) , 此位转化为int,小于0则+256, 大于0不变
- 精度(1B)
- 空位(14B),用0填充
- 尾部空位(1B),用0填充
2. dbf数据组成
DBF文件中的数据组成比较简单,每一行数据由值为32的1个字节开始,后面数据依赖每列数据的类型决定。
类型标识 | 类 |
---|---|
@ | Timestamp.class |
A B E G H I J K M | String.class |
C | String.class |
D | Date.class |
F | Double.class |
L | Boolean.class |
N 小数点后位数 != 0 | Double.class |
N 小数点后位数 == 0 && 长度 < 10 | Integer.class |
N 小数点后位数 == 0 && 长度 > 10 | Long.class |