- 浏览: 3817 次
- 性别:
- 来自: 北京
最新评论
公司拿来个二进制文件要我读出来了,我当时就有点闷,这文件里面的东西我看不见我怎么着手呢?当时人多不好当面在领导面前说出来,结果拿回去左看又看还是不懂,最好问领导。他说你现在还要先生成,然后在读出来。这下就好办了,自己生成那还不好办,自己读自己写的东西那就更好办了,哈哈。代码如下:
这是写的
下面是读上面写的:
注意:上面程序是要导入mina-core-2.0.0-RC1.jar才能运行的
写的时候ConfigProperties.encoder是一种编码
还有读的时候像ReportData[] redata=new ReportData[m];是一些基本类的
还有其他问题请留言
这是写的
package org.report; import java.io.File; import java.io.IOException; import java.nio.charset.CharacterCodingException; import org.apache.commons.io.FileUtils; import org.apache.mina.core.buffer.IoBuffer; import org.cfg.ConfigProperties; /** * @author 柳青 * * 2010-11-14 */ public class WriteData { public void writer(IoBuffer buffer){ byte[] bytes=null; try{ buffer.flip(); bytes=new byte[buffer.remaining()]; buffer.get(bytes); String filePath="Test.pr"; File file=new File("D:/"+filePath); FileUtils.writeByteArrayToFile(file, bytes); } catch (IOException e) { e.printStackTrace(); } } /** * 此方法是用来求的字符串的长度 * (包括中文和英文) * @param str * @return */ public static int getByte(String str){ byte[] by=str.getBytes(); int length=by.length; return length; } /** * @param args * @throws CharacterCodingException */ public static void main(String[] args) throws CharacterCodingException { // TODO Auto-generated method stub IoBuffer buffer=IoBuffer.allocate(100).setAutoExpand(true); buffer.putInt(1); String reportTeam="贵州送变电工程公司_10标段"; buffer.put((byte)WriteData .getByte(reportTeam)); buffer.putString(reportTeam,ConfigProperties.encoder); //用户名 String reportUser="asdf1"; buffer.put((byte)WriteData .getByte(reportUser)); buffer.putString(reportUser,ConfigProperties.encoder); //日期 buffer.putInt(20101111); //冻土和人员数目 buffer.putInt(11); buffer.putInt(22); buffer.putInt(33); buffer.putInt(44); buffer.putInt(55); buffer.putInt(66); buffer.putInt(77); //天气、材料、存在问题 String weather="很好"; buffer.putInt(WriteData.getByte(weather)); buffer.putString(weather,ConfigProperties.encoder); String material="一般"; buffer.putInt(WriteData.getByte(material)); buffer.putString(material,ConfigProperties.encoder); String problems="还行"; buffer.putInt(WriteData.getByte(problems)); buffer.putString(problems,ConfigProperties.encoder); //towers长度 buffer.putShort((short)2); //塔号、桩号、塔型 String towerNo="22222222"; buffer.put((byte)WriteData .getByte(towerNo)); buffer.putString(towerNo,ConfigProperties.encoder); String stakeNo="6106"; buffer.put((byte)WriteData .getByte(stakeNo)); buffer.putString(stakeNo,ConfigProperties.encoder); String towerMode="333333333"; buffer.put((byte)WriteData .getByte(towerMode)); buffer.putString(towerMode,ConfigProperties.encoder); //冻土类型和装配类型 buffer.put((byte) 1);buffer.put((byte) 0); //状态和时间 buffer.put((byte) 1);buffer.putInt(20101111); buffer.put((byte) 2);buffer.putInt(20101113); buffer.put((byte) 3);buffer.putInt(20101115); buffer.put((byte) 4);buffer.putInt(20101118); buffer.put((byte) 5);buffer.putInt(20101119); //下面重复 towerNo="22222222"; buffer.put((byte)WriteData .getByte(towerNo)); buffer.putString(towerNo,ConfigProperties.encoder); stakeNo="6106"; buffer.put((byte)WriteData .getByte(stakeNo)); buffer.putString(stakeNo,ConfigProperties.encoder); towerMode="333333333"; buffer.put((byte)WriteData .getByte(towerMode)); buffer.putString(towerMode,ConfigProperties.encoder); buffer.put((byte) 1);buffer.put((byte) 0); buffer.put((byte) 1);buffer.putInt(20101111); buffer.put((byte) 2);buffer.putInt(20101113); buffer.put((byte) 3);buffer.putInt(20101115); buffer.put((byte) 4);buffer.putInt(20101118); buffer.put((byte) 5);buffer.putInt(20101119); buffer.putString("end",32,ConfigProperties.encoder); WriteData writeData=new WriteData(); writeData.writer(buffer); } }
下面是读上面写的:
package org.report; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import org.apache.commons.io.FileUtils; import org.apache.mina.core.buffer.IoBuffer; public class ReportReader { public static void main(String[] args){ File file=new File("D:/Test.pr"); byte[] bs=null; try { bs=FileUtils.readFileToByteArray(file); } catch (IOException e) { e.printStackTrace(); } ReportData[] reports=null; try { reports=ReportReader.getReport(bs); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(reports); } public static ReportData[] getReport(byte[] bs)throws Exception{ if(bs==null)return null; CharsetDecoder decoder=Charset.forName("gb2312").newDecoder(); IoBuffer buf=IoBuffer.allocate(bs.length); buf.put(bs); buf.flip(); System.out.println("文件大小:"+buf.limit()); int m=buf.getInt(); System.out.println("文件数:"+m); ReportData[] redata=new ReportData[m]; for(int t=0;t<m;t++){ ReportData data=new ReportData(); redata[t]=data; int length=buf.get(); if(length>0){ data.reportTeam=buf.getString(length, decoder); System.out.println(data.reportTeam); } length=buf.get(); if(length>0){ data.reportUser=buf.getString(length, decoder); System.out.println(data.reportUser); } data.reportDate=buf.getInt(); System.out.println(data.reportDate); data.segment=new SegmentData(); data.segment.yearYDT=buf.getInt();System.out.println(data.segment.yearYDT); data.segment.yearJDT=buf.getInt();System.out.println(data.segment.yearJDT); data.segment.weekYDT=buf.getInt();System.out.println(data.segment.weekYDT); data.segment.weekJDT=buf.getInt();System.out.println(data.segment.weekJDT); data.segment.executNum=buf.getInt();System.out.println(data.segment.executNum); data.segment.supervisorNum=buf.getInt();System.out.println(data.segment.supervisorNum); data.segment.designerNum=buf.getInt();System.out.println(data.segment.designerNum); length=buf.getInt(); if(length>0){ data.segment.weather=buf.getString(length, decoder); } length=buf.getInt(); if(length>0){ data.segment.material=buf.getString(length, decoder); } length=buf.getInt(); if(length>0){ data.segment.problems=buf.getString(length, decoder); } System.out.println("天气:"+data.segment.weather); System.out.println("材料:"+data.segment.material); System.out.println("问题:"+data.segment.problems); length=buf.getShort(); data.toweres=new TowerData[length]; System.out.println("towers长度:"+length); ////////////////////////////////////////////////////////////////////////////////////////修改的地方////////////////////////// int nolength=0; for(int i=0;i<length;i++){ System.out.println("-----------------------------------------"); TowerData tower=new TowerData(); data.toweres[i]=tower; nolength=buf.get(); tower.towerNo=buf.getString(nolength,decoder); System.out.println("塔号"+tower.towerNo); nolength=buf.get(); tower.stakeNo=buf.getString(nolength,decoder); System.out.println("桩号"+tower.stakeNo); nolength=buf.get(); tower.towerMode=buf.getString(nolength,decoder); System.out.println("塔型"+tower.towerMode); tower.frozenMode=buf.get(); System.out.println("冻土类型 多年冻土或是季节冻土"+tower.frozenMode); tower.baseMode=buf.get(); System.out.println("装配类型,或非装配类型"+tower.baseMode); tower.excavateState=Integer.toString(buf.get());//String(GlobalConst.STATE_LABELS[ba.readByte()]); System.out.println("基础施工状态"+tower.excavateState); tower.excavateFinishTime=Integer.toString(buf.getInt()); System.out.println("施工完成时间"+tower.excavateFinishTime); tower.executState=Integer.toString(buf.get()); System.out.println("组塔状态"+tower.executState); tower.executFinishTime=Integer.toString(buf.getInt()); System.out.println("组塔完成时间"+tower.executFinishTime); tower.groupState=Integer.toString(buf.get()); System.out.println("架线状态"+tower.groupState); tower.groupFinishTime=Integer.toString(buf.getInt()); System.out.println("架线完成时间"+tower.groupFinishTime); tower.stringingState=Integer.toString(buf.get());//ba.writeByte(GlobalConst.getIndex(tower.stringingState,GlobalConst.STATE_LABELS)); System.out.println("附件工程状态"+tower.stringingState); tower.stringingFinishTime=Integer.toString(buf.getInt());//ba.writeInt(GlobalConst.getIntDate(tower.stringingFinishTime)); System.out.println("附件工程完成时间"+tower.stringingFinishTime); tower.adjunctState=Integer.toString(buf.get()); System.out.println("附件工程状态"+tower.adjunctState); tower.adjunctFinishTime=Integer.toString(buf.getInt()); System.out.println("附件工程完成时间"+tower.adjunctFinishTime); } System.out.println(buf.position()); buf.position(buf.position()+6);//跳过标记 redata[t]=data; } return redata; } }
注意:上面程序是要导入mina-core-2.0.0-RC1.jar才能运行的
写的时候ConfigProperties.encoder是一种编码
还有读的时候像ReportData[] redata=new ReportData[m];是一些基本类的
还有其他问题请留言
相关推荐
在这个场景中,我们关注的是MINA的核心组件以及两个特定的过滤器和传输组件:`mina-core-2.0.0-RC1.jar`、`mina-filter-compression-2.0.0-RC1.jar`和`mina-transport-apr-2.0.0-RC1.jar`。 **MINA Core (mina-core...
mina-core-2.0.0-M6.jar mina-example-2.0.0-M6.jar mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-...
mina-core-2.0.0-RC1-sources.jar
mina-core-2.0.0-M1.jar/mina-example-1.0.5.jar/slf4j-jdk14-1.6.1.jar/slf4j-log4j12-1.6.1.jar mina 所用jar
mina-core-2.0.0-RC1.jar
mina-integration-ognl-2.0.0-M4.jar mina-integration-ognl-2.0.0-M4.jar
mina-integration-beans-2.0.0-M4.jar mina-integration-beans-2.0.0-M4.jar
《mina-core-2.0.0-M1.jar与SLF4J:构建高效网络通信与日志记录》 mina-core-2.0.0-M1.jar是Apache Mina项目的核心库,它是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端和客户端应用程序。...
其中包含的两个主要文件——mina-core-2.0.0-RC1.jar和mina-core-2.0.0-RC1-sources.jar,分别提供了编译后的库文件和源代码,方便开发者进行学习和调试。 1. **mina-core-2.0.0-RC1.jar**:这是MINA核心组件的运行...
mina-core-2.0.0-M1-sources.jar是构建mina框架的主要文件
mina-core-2.0.0-M6.jar
mina-filter-compression-2.0.0-M1.jar是构建mina框架的主要文件之一
mina-integration-jmx-2.0.0-M6.jar
mina-filter-compression-2.0.0-M1-sources.jar是构建mina框架的主要文件之一
"apache-mina-2.0.16-bin.zip"通常包含了编译好的二进制库,比如JAR文件,以及可能的运行时依赖和配置文件,适合于那些不需要源码,只需要使用Mina进行开发的用户。而"apache-mina-2.0.16.zip"可能是更全面的发布包...
另一个文件`mina-2.0.0-RC1`可能是一个解压后的目录,包含了MINA的源代码、编译后的类库、配置文件以及其他辅助工具。这个目录下可能有以下几个子目录: 1. `src/main/java`: 包含MINA框架的主要Java源代码。 2. `...
mina-core-2.0.2.jar在使用网间通讯框架时需要导入该jar包
在本案例中,我们关注的是 "mina-core-2.0.1.jar",这是 Apache MINA 的核心库,包含了框架的基本组件和功能。 **MINA 核心组件:** 1. **IoSession**:MINA 中的核心概念,它代表了服务端与客户端之间的一个连接。...
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...
mina-core-2.0.4.jar