/**
* $Id: RemotingProtosHelper.java 1831 2013-05-16 01:39:51Z shijia.wxr $
*/
package com.alibaba.rocketmq.remoting.protocol;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import com.google.protobuf.InvalidProtocolBufferException;
import com.alibaba.rocketmq.remoting.protocol.RemotingProtos.KVPair;
import com.alibaba.rocketmq.remoting.protocol.RemotingProtos.KVPairList;
import com.alibaba.rocketmq.remoting.protocol.RemotingProtos.StringList;
/**
* Э�鸨����
*
* @author vintage.wang@gmail.com shijia.wxr@taobao.com
*
*/
public class RemotingProtosHelper {
/**
* ���л��ַ����б�
*/
public static byte[] stringList2Bytes(final List<String> strs) {
if (null == strs || strs.isEmpty()) {
return null;
}
StringList.Builder builder = StringList.newBuilder();
for (String str : strs) {
builder.addName(str);
}
return builder.build().toByteArray();
}
/**
* �����л��ַ����б�
*/
public static List<String> bytes2StringList(final byte[] data) throws InvalidProtocolBufferException {
if (null == data) {
return null;
}
StringList stringList = StringList.parseFrom(data);
return stringList.getNameList();
}
/**
* ���л���ֵ��
*/
public static byte[] hashMap2Bytes(final HashMap<Integer/* key */, String/* value */> nms) {
if (null == nms || nms.isEmpty()) {
return null;
}
KVPairList.Builder builder = KVPairList.newBuilder();
Iterator<Entry<Integer, String>> it = nms.entrySet().iterator();
for (int index = 0; it.hasNext(); index++) {
Entry<Integer, String> entry = (Entry<Integer, String>) it.next();
int key = entry.getKey();
String val = entry.getValue();
KVPair.Builder kvb = KVPair.newBuilder();
kvb.setKey(key);
kvb.setValue(val);
builder.addFields(index, kvb.build());
}
return builder.build().toByteArray();
}
/**
* �����л���ֵ��
*
* @throws InvalidProtocolBufferException
*/
public static HashMap<Integer/* key */, String/* value */> bytes2HashMap(final byte[] data)
throws InvalidProtocolBufferException {
if (null == data) {
return null;
}
HashMap<Integer/* key */, String/* value */> result = new HashMap<Integer/* key */, String/* value */>();
KVPairList kvList = KVPairList.parseFrom(data);
List<KVPair> kvList2 = kvList.getFieldsList();
for (KVPair kv : kvList2) {
result.put(kv.getKey(), kv.getValue());
}
return result;
}
}