我的 flatbuffers 模式文件dict.fbs
如下所示:
namespace fbs;
table Dict {
entries:[DictEntry];
}
table DictEntry {
key:string (key);
value:string;
}
root_type Dict;
现在根据文档,您可以在 Flatbuffers 中使用排序的向量和二进制查找来模拟字典,如下所示
flatbuffers::FlatBufferBuilder builder(1024);
std::string key, value;
std::ifstream infile(argv[1]);
std::string outfile(argv[2]);
std::vector<flatbuffers::Offset<DictEntry>> entries;
while (std::getline(infile, key) && std::getline(infile, value)) {
entries.push_back(CreateDictEntryDirect(builder, key.c_str(), value.c_str()));
}
auto vec = builder.CreateVectorOfSortedTables(&entries);
auto dict = CreateDict(builder, vec);
builder.Finish(dict);
我原来的单词表32MB
在磁盘上。现在对于这个列表中的每个单词,我都有一个规范化key
的和对应的value
. 如果序列化的 flatbuffer dict 现在在磁盘上的大小是原来的两倍,那将是合乎逻辑的64MB
,但实际上输出是111MB
.
我可以优化此架构以使其更紧凑吗?是什么将输出放大到几乎 4 倍的大小?