InputStream 流

2019-08-27  本文已影响0人  小凡凡520
class ALAssetNSInputStream:InputStream {
    
    var size:Int64 = 0
    fileprivate var stream: InputStream = InputStream()
    
    convenience override init(url: URL) {
        self.init()
        if let asset = ALAsset.getAssetFromUrlSync(url: url.absoluteString), let rept = asset.defaultRepresentation() {
            let fileName = rept.filename()
            var contentData: Data?
            contentData = //rept.data//
            if contentData != nil {
                self.stream = InputStream(data: contentData!)
                self.size = Int64(contentData!.count)
            }
        }
    }
    
    override func read(_ buffer: UnsafeMutablePointer<UInt8>, maxLength len: Int) -> Int {
        let readBytes = stream.read(buffer, maxLength: len)
        return readBytes
    }
    
    override var hasBytesAvailable: Bool {
        get {
            return stream.hasBytesAvailable
        }
    }
    
    override func open() {
        self.stream.open()
    }
    
    override func close() {
        self.stream.close()
    }
    
    override var streamStatus: Stream.Status {
        get {
            return stream.streamStatus
        }
    }
    
    override var delegate: StreamDelegate? {
        set {
            stream.delegate = newValue
        }
        get {
            return stream.delegate
        }
    }
    
    /* MARK swift3.0 
    func _scheduleInCFRunLoop(_ runLoop: RunLoop, forMode mode: String) {
        DPrint("call _scheduleInCFRunLoop")
    }*/
    
    // MARK swift 5.0 特别处理(必须重写!!!!!)
    override func schedule(in aRunLoop: RunLoop, forMode mode: RunLoop.Mode) {
        DPrint("schedule")
    }
}
上一篇下一篇

猜你喜欢

热点阅读