爪哇中的Protobuf:来自Accumulo值的Uid.Lists进入,但它们没有出来



我正试图从Accumulo Value (key,Value)写入和读取Uid。使用protobuf列表。具体地说:org.apache.accumulo.examples.wikisearch.protobuf.Uid;进口org.apache.accumulo.examples.wikisearch.protobuf.Uid.List.Builder

我使用以下代码编写Uid。列表,我声明UidListCount为列表中uid的# Cseq:

Builder uidBuilder = Uid.List.newBuilder();
uidBuilder.setIGNORE(false);
for String entry : seq){
    uidBuilder.addUID(entry);
}
Uid.List uidList = uidBuilder.build();

Value newAccumuloValue = new Value(uidList.toByteArray());

这似乎可以正常工作。

When I Try to read the Uid。从accumulo value中列出一个列表,其中value是一个protobuf Uid。列表,这是一个禁忌:

byte[] byteVal = value.getBytes; //retrieving Accumulo Value containing Uid.List
Uid.List uids= Uid.List.parseFrom(byteVal);
while (counter <= counter){
    String uidStr = uids.getUID(counter).toString();
    system.out.println(uidStr);
}

我一直得到"tag errors"

我很想知道如何读出输入的内容。

谢谢!

我建议将第二段代码改为:

byte[] byteVal = value.getBytes;
Uid.List uids= Uid.List.parseFrom(byteVal); 
int count = uids.getUIDCount(); 
for (int i = 0; i< count; i++){ 
    String uidStr = uids.getUID(i).toString();
    system.out.println(uidStr);
}

只要在protobuf构建列表之前正确清理列表中的uid,此代码就可以工作。如果数据中有被protobuf用作列表格式一部分的字符(例如unicode null),那么在解析数据返回时,它将中断,因为数据字符将被识别为不能正确匹配数据模式的格式字符。我将首先查看您的数据,并确保它符合您试图实现的数据质量和清洁度标准。

相关内容

  • 没有找到相关文章

最新更新