java解析fsn文件

上传人:小** 文档编号:91138587 上传时间:2019-06-26 格式:DOC 页数:14 大小:34.74KB
返回 下载 相关 举报
java解析fsn文件_第1页
第1页 / 共14页
java解析fsn文件_第2页
第2页 / 共14页
java解析fsn文件_第3页
第3页 / 共14页
java解析fsn文件_第4页
第4页 / 共14页
java解析fsn文件_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《java解析fsn文件》由会员分享,可在线阅读,更多相关《java解析fsn文件(14页珍藏版)》请在金锄头文库上搜索。

1、package action;import java.util.ArrayList;import tools.FsnTools;import bean.FsnBody;import bean.FsnModel;public class FsnReaderAction public final static int intstep=2; /Uint16字节长度public final static int stringstep=4; /Uint32字节长度public final static int fsnHeadLengh=32;/fsn文件头字节长度public final static

2、int fsnPerBodyNoImg=100; /fsn文件体每条记录,不包括图像信息的字节长度public final static int fsnPerBodyImg=1644; /fsn文件体每条记录,包括图像信息的字节长度public int filePos=0; /fsn文件字节流当前指针位置public FsnModel fm; /本实例解析的FsnMedel对象public String fsnFilePath ;/FSN文件的存储完整路径,包括文件名public FsnReaderAction(String filePath)this.fsnFilePath=filePath

3、;public FsnModel readFsnFile() throws Exception /FsnModel ret=null;trythis.fm=new FsnModel(this.fsnFilePath);/hzyimport 把文件转成字节流数组byte fsnbytes =FsnTools.toByteArray(this.fsnFilePath);this.fm.setSize(fsnbytes.length);System.out.println(File Lengh: +fsnbytes.length);/ 读取头文件setHead(fsnbytes);long coun

4、ter = this.fm.getCounter(); / 冠字号信息条数/System.out.println(this.fm.getHeadString()2=+this.fm.getHeadString()2);int size = this.fm.getHeadString()2 != 0x2D ? fsnPerBodyImg : fsnPerBodyNoImg;/System.out.println(this.fm.getHeadString()2 =+this.fm.getHeadString()2 );/System.out.println(counter =+counter);

5、/System.out.println(size=+size);/System.out.println(counter =* size+counter * size);/System.out.println(fsnHeadLengh=+fsnHeadLengh);/如果fsn文件的长度合一致if (counter * size + fsnHeadLengh = fsnbytes.length) ArrayList list = new ArrayList();long ValutaSum=0;for (int i = 0; i counter; i+) FsnBody body = new F

6、snBody();boolean noException=false; /处理过程中没有异常/每条fsn信息均从i * size + 32(头的长度)处起始int thisPosSart=i * size + fsnHeadLengh;/此处处理非常重要,在读取图片文件前一定要做处理因为图片字节流长度固定,644位,getSnoExpImg方法只读到图片信息中有数据部分对应的字节流,后面的都是空值,将不再读取/某条图片数据读完以后,filePos不一定会移至这个图片数据对应的结尾位置,要在读取下一条数据时,强制将filePos指向下一条图片信息对应字节流起始位置if(filePosthisPo

7、sSart)filePos=thisPosSart;body = getSnoExpImg(fsnbytes);body.setRecordNum(i+1); /此条fsn记录在fsn文件中的顺序ValutaSum += body.getValuta();if(size!=fsnPerBodyNoImg)testSnoImg(fsnbytes); /校验图片数据合法性,如果不合法,将抛出异/map.put(ImageSno, imageSno); /图片BufferedImage对象 ,不能将此数据放入map,一是数据量大时内存溢出,二是效率大打折byte imgbytes=FsnTools.

8、byteCopy(fsnbytes, thisPosSart+fsnPerBodyNoImg, size-fsnPerBodyNoImg);body.setImageBytes(imgbytes); /图片字节数组数据imgbytes=null; /及时释放图片字节数组对象,释放内else/map.put(ImageSno, null);body.setImageBytes(null);noException=true;if(noException) /当没有异常时记录解析数据list.add(body);elseif(this.fm.isPermitException() /当有异常时,如果

9、fsn配置文件允许记录异常,则记录,否则不记录list.add(body);this.fm.setBodys(list) ;catch(Exception e)this.fm.setAnalysisExcepted(true);this.fm.setAnalysisErrorMsg(e.getMessage();/写日志return this.fm;/* * 获取Fsn每条记录中的图片对象 * param fsnBytes fsn文件的byte字节流对 * return */public void testSnoImg(byte fsnBytes) throws Exception/冠字号码的

10、个数int num = parseInt(fsnBytes);/每个冠字号码的图像宽int height = parseInt(fsnBytes);int width = parseInt(fsnBytes);int Reserve2 = parseInt(fsnBytes);/ 图片三维不能小于0if(num=0|height=0|width12)throw new Exception(图片数据读取失败,冠字号码个数不能多);/图片大小不能多于图片缓冲区的总大小,减去108位,包括100位其他字段和8位图像metalong mutiall = 4 * width * num;if (muti

11、all fsnPerBodyImg - 108)throw new Exception(图像数据读取失败,图像长度大于图像缓冲器长度);/int i = 0;/while ( i width * num) /byte pic=parseByte(fsnBytes,4);/String s=MessageUtil.toBinaryString(pic); /i+;/public FsnBody getSnoExpImg(byte fsnBytes) FsnBody body = new FsnBody();/ 设置日期时间int data = parseInt(fsnBytes);int tim

12、e = parseInt(fsnBytes);/System.out.println(data=+data);/System.out.println(time=+time);/*if(time 9;int m = (data - (y 5;int d = data - (y 9) - (m 11;int mm = (time - (hh 5;int ss = (time - (hh 11) - (mm 5) 1;/*String DateStr= StrUtil.numAddZero(String.valueOf(y + 1980) ),4)+ - + StrUtil.numAddZero(S

13、tring.valueOf(m),2) + - + StrUtil.numAddZero(String.valueOf(d),2);String TimeStr=hh + : + mm+ : + ss;body.setDateStr(DateStr);body.setTimeStr( TimeStr);/*/*StringBuffer DateBuf=new StringBuffer();StringBuffer TimeBuf=new StringBuffer();DateBuf.append( y + 1980);DateBuf.append( -);DateBuf.append( FsnTools

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号