您可以创建自己的,如果行中的数据相似,您可以创建资源/索引映射,从而大大减少大小,像这样
原始文件:
第 1 行:1212, 34,45,1212,45,34,56,45,56
第 2 行:34,45,1212,78,54,87,....
您可以创建一个唯一值列表,而不是使用和索引替换,
34,45,54,56,78,87,1212
第 1 行:6,0,2,6,1,0,.....
这可以为您节省超过 30% 或更多的数据传输,但这取决于数据的冗余程度
更新
这里是一个简单的实现
std::set<int> uniqueValues
DataTable my2dData; //assuming 2d vector implementation
std::string indexMap;
std::string fileCompressed = "";
int Find(int value){
for(int i = 0; i < uniqueValues.size; ++i){
if(uniqueValues[i] == value) return i;
}
return -1;
}
//create list of unique values
for(int i = 0; i < my2dData.size; ++i){
for(int j = 0; j < my2dData[i].size; ++j){
uniqueValues.insert(my2dData[i][j]);
}
}
//create indexes
for(int i = 0; i < my2dData.size; ++i){
std::string tmpRow = "";
for(int j = 0; j < my2dData[i].size; ++j){
if(tmpRow == ""){
tmpRow = Find(my2dData[i][j]);
}
else{
tmpRow += "," + Find(my2dData[i][j]);
}
}
tmpRow += "\n\r";
indexMap += tmpRow;
}
//create file to transfer
for(int k = 0; k < uniqueValues.size; ++k){
if(fileCompressed == ""){
fileCompressed = "i: " + uniqueValues[k];
}
else{
fileCompressed += "," + uniqueValues[k];
}
}
fileCompressed += "\n\r\d:" + indexMap;
现在在接收端你只是做相反的事情,如果行以“i”开头你得到索引,如果它以“d”开头你得到数据