最初の実装
最初の実装は、3つのステップに分かれています。
- ステップ1:ドメインオブジェクトを作成します。
- ステップ2:データ変換のさまざまなツールを作成します。
第三段階:パッケージ要求
ステップ1:ドメインオブジェクトを作成します。
このステップでは、あまり適しドメイン、理解することは比較的容易で、比較的単純である、またはそれはそうするたびにあなたがダースのドメインを埋めています。
、あなたのインターフェイスのドキュメントを開き、インターフェースメッセージに文書を見てドメインの数は、ここで私は64個のドメインを持っている、いくつかのサブドメインは、ドメインの下にありますしています。
public class Message8583Body {
private String msgType;// 消息类型
private String bitMap;// 位元表
private String domain2;
private String domain3;
private String domain4;
···
private String domain48;
private String domain49;
private String domain58;
private String domain58_1;
private String domain58_2;
private String domain58_3;
}
ここで私は単純に、各ドメインとそのサブドメインに基づいてクラスを作成し、何か、64のフィールドの合計を言うでしょう。ここ58たとえば私のドメインへのサブドメインは、三つのサブドメイン、setメソッドは、特別な処理を必要とするサブドメイン以下の55個のフィールドがあるとします。
public String getDomain58() {
return domain58;
}
public void setDomain58(String domain58) {
this.domain58 = domain58;
}
public String getDomain58_1() {
return domain58_1;
}
public void setDomain58_1(String domain58_1) {
this.domain58_1 = domain58_1;
this.domain58 += domain58_1;
}
public String getDomain58_2() {
return domain58_2;
}
public void setDomain58_2(String domain58_2) {
this.domain58_2 = domain58_2;
this.domain58 += domain58_2;
}
public String getDomain58_3() {
return domain58_3;
}
public void setDomain58_3(String domain58_3) {
this.domain58_3 = domain58_3;
this.domain58 += domain58_3;
}
換言すれば、このサブドメインメッセージは58個のドメインの背後にバックステッチが続きます。58_1は、サブドメインが含まれている場合は、ここでの言葉遣いのように詳述されていません。これまでのところ、最初のステップは完了です。
(警告:私はここでの意味は非常に同時使用することを検討してください実際の状況に応じて、簡単な表現です。)
ステップ2:データ変換のさまざまなツールを作成します。
8583で、メッセージは数字と文字を送信されるため、いくつかはASCIIに変換され、一部はちょうどように右のBCDフィル0で/左、と。ここで私はここでフルバージョンが必要な場合は、githubの上で移動してください、一般的に使用される文字変換です。
/**
* 获取位元表
*
* @param list
* @return
*/
public static String getBitMap(List<Integer> list) {
StringBuffer result = new StringBuffer("");
byte[] bytes = new byte[64];
for (int i = 0; i < 64; i++) {
if (list.contains(i + 1)) {
bytes[i] = 1;
} else {
bytes[i] = 0;
}
}
StringBuffer sb = new StringBuffer("");
for (int i = 0; i <= 64; i++) {
if (i % 4 == 0 && i != 0) {
result.append(
String.format("%x", Integer.valueOf(sb.toString(), 2))
.toUpperCase());
sb.delete(0, sb.length());
if (i < 64) {
sb.append(bytes[i]);
}
} else {
sb.append(bytes[i]);
}
}
log.info("bitMap=" + result.toString());
return result.toString();
}
/**
* 普通字符串转为ascii字符串
*
* @param asciiString 字节数组
* @return
*/
public static String asciiToHex(String asciiString) {
if (asciiString == null) {
return "";
}
StringBuffer buff = new StringBuffer();
byte[] bytes = asciiString.getBytes();
int len = bytes.length;
for (int j = 0; j < len; j++) {
if ((bytes[j] & 0xff) < 16) {
buff.append('0');
}
buff.append(Integer.toHexString(bytes[j] & 0xff).toUpperCase());
}
return buff.toString();
}
スペースの制約のため、私は時間が第1の方法記載されている二つの例であるためにここにいる、さまざまなツールを作成し、第二段階は完了です。
第三段階:パッケージ要求
パッケージの要求は比較的単純であり、第1ビットテーブルが作成された、そしてそれにドメインを割り当てます。
//位元表填写
Integer[] array = {2,3,4,11,25,41,42,58,60,63,64};
List<Integer> list= Arrays.asList(array);
値は、値のドメインを有し、ここで内部ビットテーブルを表し、データを介してリストを作成し、時間領域を割り当て、その後、ビットテーブルに一覧表示します。
次の割り当てを行うため、またはサンプルコード
Message8583Body body = new Message8583Body();
body.setMsgType("1111");
body.setBitMap(getBitMap(list));
body.setDomain2("2222");
body.setDomain3("3333");
body.setDomain4("4444");
···
body.setDomain58_1("581581581");
body.setDomain58_2("582582582");
body.setDomain58_3("583583583");
String domain58 = (这里调用实际报文转换的方式,一般58域是获取整体报文长度,拼装在58域的前面)(body.getDomain58(), 3);
body.setDomain58(domain58);
あなたのメッセージが完成し設定されている場合は、メッセージの前で戦うために、すべてのメッセージの長さを計算するために、サービス側と合意された方法を呼び出します。これまでのところ、第3のステップは完了です。
三つのステップが完了したら、あなたはサービス側にソケットを送信することができ、残りは仕事を委託されています。