C++ 原型设计

C++ 原型设计,c++,protocol-buffers,C++,Protocol Buffers,我有一个包含很多东西的消息图像和一个存储多个图像的消息图像集 message Image { ... } message ImageSet { repeated Image images = 1; } 我还需要多个图像集,因为我不想将所有内容都保存在一个文件中。我遇到的问题是,每个图像集都变得非常大,因此我收到了警告/错误。有没有更好的设计方法 注意,我像这样解析文件 ImageSet image_set; image_set.ParseFromIstream(stream);

我有一个包含很多东西的消息图像和一个存储多个图像的消息图像集

message Image {
    ...
}
message ImageSet {
    repeated Image images = 1;
}
我还需要多个图像集,因为我不想将所有内容都保存在一个文件中。我遇到的问题是,每个图像集都变得非常大,因此我收到了警告/错误。有没有更好的设计方法

注意,我像这样解析文件

ImageSet image_set;
image_set.ParseFromIstream(stream);

您不必使用protobuf消息来发送图像数据对象。您可以设计如下内容来描述图像:

message Image {
    required int64 bytes_size = 1;
}

message ImageSet {
    repeated Image images = 1;
}
指定发送的每个图像数据的计数和大小。而不仅仅是通过套接字发送消息日期后的图像,并以相同的顺序在另一侧读取

在发送方方面:

socket.write(protobuf_message_size); // for example 8 bytes    
socket.write(protobuf_message);
socket.write(binary_images_data);

我问了另一个关于警告的问题:我正在将图像集存储在文件中。您是否建议在不使用ImageSet的情况下将多个图像写入一个文件中?不完全是。我以为你把图像作为二进制字段存储在原型类中,我不是存储图像,而是存储一些来自图像的统计信息,这些图像可能很大。这就是图像信息变大的原因。某种梯度直方图和不同的方向。。。不管怎么说,就像密集筛选一样,结果是我在图像消息中存储了每个图像数兆字节的数据,我现在就得到了。正如我所说,您不必在protobuf消息中发送图像,您可以只指定每个iMessage的大小,并在protobuf消息之后向您发送图像数据。