Не удается прочитать (все) данные из 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, но когда я это сделаю, синтаксический анализатор также выйдет из строя (по-видимому, потому, что он также получает неполные данные).

0 ответов

Другие вопросы по тегам