【发布时间】:2021-01-15 11:15:59
【问题描述】:
我正在尝试使用来自 SwiftNIO 的 CircularBuffer<UInt8> 来存储数据,一旦缓冲区几乎满了,就使用 OutputStream 将内容转储到文件中。不幸的是,OutputStream.write() 方法将UnsafePointer 作为参数,而CircularBuffer 可以输出UnsafeBufferPointer。有没有办法将CircularBuffer 转换为UnsafePointer?
我尝试使用以下代码扩展 CircularBuffer,我成功使用该代码将结构转换为字节数组,因为有人建议 CircularBuffer 实际上是一个结构,但我的输出文件中出现垃圾:
extension CircularBuffer {
func toBytes() -> [UInt8] {
let capacity = MemoryLayout<Self>.size
var mutableValue = self
return withUnsafePointer(to: &mutableValue) {
return $0.withMemoryRebound(to: UInt8.self, capacity: capacity) {
return Array(UnsafeBufferPointer(start: $0, count: capacity))
}
}
}
}
有什么想法吗?
【问题讨论】:
-
如果你有一个 UnsafeBufferPointer 那么你可以通过它的
.baseAddress来获得一个 UnsafePointer。 -
stackoverflow.com/questions/64120725/… 的副本?你不能通过再次问同样的问题来逃避重复。
-
抱歉,matt 以为它已经被删除了。
-
虽然我同意应该改进一个问题(而不是删除并再次询问),但我也认为另一个问题已被错误地关闭为重复。这不是将结构写入文件,而是将循环缓冲区结构的“内容”写入文件。
标签: swift circular-buffer swift-nio