如何从golang中的单个protobuf二进制文件解码多个度量(流倍数)

2024-10-02 02:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我是刚来戈朗的。 我有protobuff二进制消息文件,它有多条消息(流)。 能够像下面一样使用Python轻松地解码,但找不到任何简单的方法来使用GO实现相同的功能。 任何帮助都将不胜感激

Python代码:

def read_pb_stream_from_file():
    amw = my_stream_pb2.MyTestMessageWrapper()
    count = 0
    with open("stream.strmpb",'rb') as f:
        data = f.read()
        n = 0

        while n < len(data):
            msg_len,new_pos = _DecodeVarint32(data,0)
            n = new_pos
            msg_buf = data[n:n+msg_len]
            n += msg_len
            amw.ParseFromString(msg_buf)
            data = data[n:]
            print(count)
            print(amw)
            count+=1

Tags: 文件pos消息newreaddatastreamlen
1条回答
网友
1楼 · 发布于 2024-10-02 02:31:39

发现此golang有util包-

部分代码如下所示:

导入“github.com/matttproud/golang_protobuf_extensions/pbutil”

data, err := ioutil.ReadFile("stream.strmpb")
myTestMessage := &my_stream.MyTestMessageWrapper{}
    in := bytes.NewReader(data)
    // Split proto stream to individual message
    for {
        myTestMessage.Reset()
        if _, err := pbutil.ReadDelimited(in, myTestMessage); err != nil {
            if err == io.EOF {
                break
            }
        }
        // Convert protobuf message to json
        marshaler := jsonpb.Marshaler{}
        jsonMessage, _ := marshaler.MarshalToString(myTestMessage)
        log.Println("jsonMessage:", jsonMessage)
    }

相关问题 更多 >

    热门问题