62,614
社区成员
发帖
与我相关
我的任务
分享
public class Test {
public static void main(String[] args) {
CmppMessageId messageId = CmppMessageId.next(12345);
System.out.println("long: " + messageId.getMessageId());
System.out.println(" hex: " + messageId.getHexMessageId());
System.out.println(messageId);
System.out.println("-------------------");
long id = messageId.getMessageId();
CmppMessageId pa = CmppMessageId.parse(id);
System.out.println(pa);
System.out.println(pa.equals(messageId));
System.out.println("-------------------");
String hex = messageId.getHexMessageId();
CmppMessageId pb = CmppMessageId.parse(hex);
System.out.println(pb);
System.out.println(pb.equals(messageId));
}
}
import java.util.Calendar;
import java.util.concurrent.atomic.AtomicInteger;
public class CmppMessageId {
private final static char[] HEX = "0123456789abcdef".toCharArray();
private static AtomicInteger atomic = new AtomicInteger(0);
private long messageId;
private int month;
private int day;
private int hour;
private int minute;
private int second;
private int gateway;
private int sequence;
private CmppMessageId() {
}
private CmppMessageId(int gateway) {
this.gateway = gateway;
this.sequence = atomic.getAndIncrement() & 0xff;
timeSetting();
messageIdSetting();
}
public static CmppMessageId next(int gateway) {
return new CmppMessageId(gateway);
}
public static CmppMessageId parse(long messageId) {
CmppMessageId cmppMessageId = new CmppMessageId();
cmppMessageId.messageId = messageId;
cmppMessageId.month = (int)((messageId >>> 60) & 0xf);
cmppMessageId.day = (int)((messageId >>> 55) & 0x1f);
cmppMessageId.hour = (int)((messageId >>> 50) & 0x1f);;
cmppMessageId.minute = (int)((messageId >>> 44) & 0x3f);;
cmppMessageId.second = (int)((messageId >>> 38) & 0x3f);;
cmppMessageId.gateway = (int)((messageId >>> 16) & 0x3fffff);;
cmppMessageId.sequence = (int)(messageId & 0xff);;
return cmppMessageId;
}
public static CmppMessageId parse(String hexMessageId) {
return parse(Long.parseLong(hexMessageId, 16));
}
private void timeSetting() {
Calendar current = Calendar.getInstance();
this.month = current.get(Calendar.MONTH) + 1;
this.day = current.get(Calendar.DATE);
this.hour = current.get(Calendar.HOUR_OF_DAY);
this.minute = current.get(Calendar.MINUTE);
this.second = current.get(Calendar.SECOND);
}
private void messageIdSetting() {
messageId |= (long)month << 60L;
messageId |= (long)day << 55L;
messageId |= (long)hour << 50L;
messageId |= (long)minute << 44L;
messageId |= (long)second << 38L;
messageId |= (long)gateway << 16L;
messageId |= (long)sequence & 0xffL;
}
public String getHexMessageId() {
char[] chs = new char[16];
chs[ 0] = HEX[(int)((messageId >>> 60) & 0xf)];
chs[ 1] = HEX[(int)((messageId >>> 56) & 0xf)];
chs[ 2] = HEX[(int)((messageId >>> 52) & 0xf)];
chs[ 3] = HEX[(int)((messageId >>> 48) & 0xf)];
chs[ 4] = HEX[(int)((messageId >>> 44) & 0xf)];
chs[ 5] = HEX[(int)((messageId >>> 40) & 0xf)];
chs[ 6] = HEX[(int)((messageId >>> 36) & 0xf)];
chs[ 7] = HEX[(int)((messageId >>> 32) & 0xf)];
chs[ 8] = HEX[(int)((messageId >>> 28) & 0xf)];
chs[ 9] = HEX[(int)((messageId >>> 24) & 0xf)];
chs[10] = HEX[(int)((messageId >>> 20) & 0xf)];
chs[11] = HEX[(int)((messageId >>> 16) & 0xf)];
chs[12] = HEX[(int)((messageId >>> 12) & 0xf)];
chs[13] = HEX[(int)((messageId >>> 8) & 0xf)];
chs[14] = HEX[(int)((messageId >>> 4) & 0xf)];
chs[15] = HEX[(int)(messageId & 0xf)];
return new String(chs);
}
public long getMessageId() {
return messageId;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public int getHour() {
return hour;
}
public int getMinute() {
return minute;
}
public int getSecond() {
return second;
}
public int getGateway() {
return gateway;
}
public int getSequence() {
return sequence;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + day;
result = prime * result + gateway;
result = prime * result + hour;
result = prime * result + (int) (messageId ^ (messageId >>> 32));
result = prime * result + minute;
result = prime * result + month;
result = prime * result + second;
result = prime * result + sequence;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CmppMessageId other = (CmppMessageId) obj;
if (day != other.day)
return false;
if (gateway != other.gateway)
return false;
if (hour != other.hour)
return false;
if (messageId != other.messageId)
return false;
if (minute != other.minute)
return false;
if (month != other.month)
return false;
if (second != other.second)
return false;
if (sequence != other.sequence)
return false;
return true;
}
public String toString() {
return "MessageId: " + getHexMessageId() +
", month: " + month +
", day: " + day +
", hour: " + hour +
", minute: " + minute +
", second: " + second +
", gateway: " + gateway +
", sequence: " + sequence;
}
}