Swift-RoringBitmap-序列化为base64
我正在尝试将以轰鸣位图格式生成的bloom过滤器序列化为base64字符串,以便将其保存在MongoDB中。但是函数portableSerialize对我来说有点棘手 到目前为止,我只是测试它是如何工作的,我生成了一个随机的bloom过滤器值,稍后我会尝试将其转换为buffer->to data->to base64:Swift-RoringBitmap-序列化为base64,swift,bitmap,base64,Swift,Bitmap,Base64,我正在尝试将以轰鸣位图格式生成的bloom过滤器序列化为base64字符串,以便将其保存在MongoDB中。但是函数portableSerialize对我来说有点棘手 到目前为止,我只是测试它是如何工作的,我生成了一个随机的bloom过滤器值,稍后我会尝试将其转换为buffer->to data->to base64: func generateBloomFilterData(){ let bitmap = RoaringBitmap() for i in 0..<50 {
func generateBloomFilterData(){
let bitmap = RoaringBitmap()
for i in 0..<50 {
let random = arc4random_uniform(2)
if random == 0 {
bitmap.add(UInt32(i))
}
}
let count = (Int(bitmap.count) * MemoryLayout<Int8>.size)
var buffer = [Int8](repeating: 0, count: count)
_ = bitmap.portableSerialize(buffer: &buffer)
let uintBuffer = buffer.map { UInt8(bitPattern: $0) }
let bufferData = Data(uintBuffer)
let base64String = bufferData()
print("buffer size: \(buffer.count), \(uintBuffer.count), base64: \(bufferData.base64EncodedString())")
//-> send base64 string to database
}
func generateBloomFilterData(){
让位图=RoringBitmap()
对于0中的i..将base64字符串发送到数据库
}
这将生成一个错误:
malloc:MallocStackLogging:尝试从中释放索引
界限
控制台显示:
缓冲区大小:20,20,base64:Ojaaaaaaaaaaaaaaaaamababqa=
是否有一种方法可以简单地从上面生成的RoaringBitmap()生成base64字符串?根据Daniel的帮助,似乎我对大小使用了错误的参数。正确的语法如下所示:
let size = rbm.portableSizeInBytes()
var buffer = [Int8](repeating: 0, count: size)
_ = rbm.portableSerialize(buffer: &buffer)
let uint8Buffer = buffer.map { UInt8(bitPattern: $0) }
let base64Encoded = Data(uint8Buffer).base64EncodedString()
什么是轰鸣位图?这是某种第三方框架吗?你能提供相关信息的链接吗?你应该编辑你的问题来提供这些信息。不要让本帖的未来读者通过评论进行“拾荒者搜寻”,以了解你在说什么。(我正在使用第三部分库“RoaringBitmap”(链接),它允许我
。我希望能够从RoaringBitmap
导出数据,并将其转换为base64编码的数据,这样我就可以