Не удается прочитать (все) данные из InputStream, созданные запросом потока Alamofire
Я пытаюсь использовать запрос потока Alamofire, но похоже, что InputStream, который я получаю от API, ведет себя не так, как ожидалось. Вот пример кода:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
doTest()
}
func doTest() {
let url = URL(string: "https://feeds.megaphone.fm/WWO6655869236")!
let inputStream = AF.streamRequest(url)
.validate()
.asInputStream()
if let inpStream = inputStream {
let data = try! Data(reading: inpStream)
print("Read \(data.count) bytes")
} else {
print("Stream is nil")
}
}
}
extension Data {
init(reading input: InputStream) throws {
self.init()
input.open()
defer {
input.close()
}
let bufferSize = 1024
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufferSize)
defer {
buffer.deallocate()
}
while input.hasBytesAvailable {
let read = input.read(buffer, maxLength: bufferSize)
if read < 0 {
//Stream error occured
throw input.streamError!
} else if read == 0 {
//EOF
break
}
self.append(buffer, count: read)
}
}
}
В
Data
расширение для чтения
InputStream
Я взял здесь
Если я попытаюсь сразу прочитать из потока, я получу 0 байт. Если я читаю с опозданием или заменяю
while input.hasBytesAvailable
к
while true
, то я получаю только первые 1024 байта (размер внутреннего буфера Alamofire при работе с потоками).
Моя настоящая цель - передать экземпляр моего потока в
XMLParser
, но когда я это сделаю, синтаксический анализатор также выйдет из строя (по-видимому, потому, что он также получает неполные данные).