`
qingqinguo
  • 浏览: 3817 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

二进制文件的读写(mina-core-2.0.0-RC1.jar)

    博客分类:
  • j2se
阅读更多
   公司拿来个二进制文件要我读出来了,我当时就有点闷,这文件里面的东西我看不见我怎么着手呢?当时人多不好当面在领导面前说出来,结果拿回去左看又看还是不懂,最好问领导。他说你现在还要先生成,然后在读出来。这下就好办了,自己生成那还不好办,自己读自己写的东西那就更好办了,哈哈。代码如下:

  这是写的
  
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];是一些基本类的

还有其他问题请留言
0
0
分享到:
评论

相关推荐

    mina-core-2.0.0-RC1.jar,mina-filter-compression-2.0.0-RC1.jar

    在这个场景中,我们关注的是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...

    mina2.0 含11个jar包

    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-RC1-sources.jar

    mina-core-2.0.0-M1.jar/mina-example-1.0.5.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-core-2.0.0-RC1.jar

    mina-integration-ognl-2.0.0-M4.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-integration-beans-2.0.0-M4.jar

    mina-core-2.0.0-M1.jar和slf4j

    《mina-core-2.0.0-M1.jar与SLF4J:构建高效网络通信与日志记录》 mina-core-2.0.0-M1.jar是Apache Mina项目的核心库,它是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端和客户端应用程序。...

    mina-core-2.0.0-RC1

    其中包含的两个主要文件——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-core-2.0.0-M1-sources.jar是构建mina框架的主要文件

    mina-core-2.0.0-M6.jar

    mina-core-2.0.0-M6.jar

    mina-filter-compression-2.0.0-M1.jar

    mina-filter-compression-2.0.0-M1.jar是构建mina框架的主要文件之一

    mina-integration-jmx-2.0.0-M6.jar

    mina-integration-jmx-2.0.0-M6.jar

    mina-filter-compression-2.0.0-M1-sources.jar

    mina-filter-compression-2.0.0-M1-sources.jar是构建mina框架的主要文件之一

    apache-mina-2.0.16-jar包-代码.zip

    "apache-mina-2.0.16-bin.zip"通常包含了编译好的二进制库,比如JAR文件,以及可能的运行时依赖和配置文件,适合于那些不需要源码,只需要使用Mina进行开发的用户。而"apache-mina-2.0.16.zip"可能是更全面的发布包...

    mina-2.0.0-RC1.zip

    另一个文件`mina-2.0.0-RC1`可能是一个解压后的目录,包含了MINA的源代码、编译后的类库、配置文件以及其他辅助工具。这个目录下可能有以下几个子目录: 1. `src/main/java`: 包含MINA框架的主要Java源代码。 2. `...

    mina-core-2.0.2.jar

    mina-core-2.0.2.jar在使用网间通讯框架时需要导入该jar包

    mina-core-2.0.1.jar,apache-mina-2.0.1

    在本案例中,我们关注的是 "mina-core-2.0.1.jar",这是 Apache MINA 的核心库,包含了框架的基本组件和功能。 **MINA 核心组件:** 1. **IoSession**:MINA 中的核心概念,它代表了服务端与客户端之间的一个连接。...

    Apache Mina核心jar包:mina-core-2.0.7

    Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...

    mina-core-2.0.4.jar

    mina-core-2.0.4.jar

Global site tag (gtag.js) - Google Analytics