public void write(OutputStream out) throws IOException {
		getHead().setLength(143 + 21 * UserNumber.length + this.MessageContentLength);
		getHead().write(out);
		byte bs[] = new byte[21];
		System.arraycopy(SPNumber.getBytes(), 0, bs, 0, SPNumber.getBytes().length);
		out.write(bs);
		bs = new byte[21];
		System.arraycopy(ChargeNumber.getBytes(), 0, bs, 0,
				ChargeNumber.getBytes().length);
		out.write(bs);
		//构造手机号码
		out.write(UserNumber.length);
		for (int i = 0; i < UserNumber.length; i++) {
			bs = new byte[21];
			System.arraycopy(UserNumber[i].getBytes(), 0, bs, 0,
					UserNumber[i].getBytes().length);
			out.write(bs); 
		}
		
		bs = new byte[5];
		System.arraycopy(CorpId.getBytes(), 0, bs, 0, CorpId.getBytes().length);
		out.write(bs);
		bs = new byte[10];
		System.arraycopy(ServiceType.getBytes(), 0, bs, 0,
				ServiceType.getBytes().length);
		out.write(bs);
		out.write(FeeType);
		bs = new byte[6];
		String sValue = String.valueOf(FeeValue);
		System.arraycopy(sValue.getBytes(), 0, bs, 0, sValue.getBytes().length);
		out.write(bs);
		bs = new byte[6];
		sValue = String.valueOf(GivenValue);
		System.arraycopy(sValue.getBytes(), 0, bs, 0, sValue.getBytes().length);
		out.write(bs);
		out.write(AgentFlag);
		out.write(MorelatetoMTFlag);
		out.write(Priority);
		bs = new byte[16];
		sValue = ExpireTime != null ? fmt.format(ExpireTime) :"";
		System.arraycopy(sValue.getBytes(), 0, bs, 0, sValue.getBytes().length);
		out.write(bs);
		bs = new byte[16];
		sValue = ScheduleTime != null ? fmt.format(ScheduleTime) : "";
		System.arraycopy(sValue.getBytes(), 0, bs, 0, sValue.getBytes().length);
		out.write(bs);
		out.write(ReportFlag);
		out.write(TP_pid);
		out.write(TP_udhi);
		out.write(MessageCoding);
		out.write(MessageType);
		out.write(Utils.IntToBytes4(MessageContentLength));
		
		
		out.write(MessageContent);
		bs = new byte[8];
		if (Reserve != null)
			System.arraycopy(Reserve.getBytes(), 0, bs, 0,
					Reserve.getBytes().length);
		out.write(bs);
		out.flush();
	}