//加载字典 public int init(String modelfile){ int headersize = sizeof(ModelHeader); int subsize = sizeof(FeatureHeader); int shortsize = sizeof(short); //std::ifstream inputfile; //inputfile.open(modelfile.c_str(), std::ios::binary); File mapFile = new File(modelfile); FileInputStream inputfile = new FileInputStream(mapFile); if(!mapFile.exists()) { System.out.println("map file no exits:"+modelfile); return -1; } long filesize = mapFile.length();//filesize byte if(filesize < headersize) { inputfile.close(); System.out.println("Invalid model file:"+modelfile); //printf("Invalid model file: %s\n", modelfile.c_str()); return -1; } try { ModelHeader header = new ModelHeader(); //读取文件头=========================================================== //inputfile.read((char*)&header, headersize); boolean ok = true; char[] sign = header.getSign(); if(sign[0] != 'S' || sign[1] != 'H' || sign[2] != 'W' || sign[3] != 'R') ok = false; if(ok) { if(header.getWidth() < 10 || header.getHeight() < 10 || header.getPointdist() < 1 || header.getCount() < 0) ok = false; } if(ok) { if(filesize - (header.getCount()) * subsize < 0) ok = false; } if(ok) { char lang_temp[] = new char[8]; //memset(lang_temp, 0, 8); //memcpy(lang_temp, &(header.getLang()[0]), 6); lang = new String(lang_temp); ver = header.getVer(); type = header.getType(); pointdist = header.getPointdist(); width = header.getWidth(); height = header.getHeight(); int count = header.getCount(); features = new ArrayList<Feature>(); for(int i=0; i<count; i++) { if(filesize - subsize < 0) { System.out.println("Invalid model file: Sub header is not valid."); //printf("Invalid model file: Sub header is not valid.\n"); ok = false; break; } boolean subok = true; FeatureHeader subheader = new FeatureHeader(); inputfile.read((char*)&subheader, subsize); if(subheader.count <= 0 || subheader.strokecount <= 0 || subheader.word[0] == '0') { System.out.println("Invalid model file: Sub header is not valid."); //printf("Invalid model file: Sub header is not valid.\n"); subok = false; ok = false; break; } if(subok) { filesize = filesize - subsize; if(filesize - (subheader.count) * shortsize < 0) { System.out.println("Invalid model file: Feature data is not valid."); //printf("Invalid model file: Feature data is not valid.\n"); subok = false; ok = false; break; } char newword[] = new char[8]; memset(newword, 0, 8); memcpy(newword, &(subheader.word[0]), 4); Feature feature; feature.strokecount = subheader.strokecount; feature.word = newword; for(int j = 0; j < subheader.count; j++) { short sv; inputfile.read((char*)&sv, shortsize); int fv = sv; feature.feature.push_back(fv); } features.add(feature); filesize = filesize - (subheader.count) * shortsize; } if(filesize <= 0) { if(filesize < 0) ok = false; break; } } if(!ok) features = new ArrayList<Feature>(); } } catch(Exception e)