首页 > 解决方案 > 如何在 Swift InputStream 中实现 skip() 方法

问题描述

我正在尝试实现一种可以对 InputStream 执行以下操作的方法:

 /**
* Skips n bytes of input.
* @param n the number of bytes to skip
* @return  the actual number of bytes skipped.
*/

func skip(n: Int) throws-> Int {
    let res = inputStream.skip(n) //Value of type 'InputStream' has no member 'skip'
    pos_ += res
    return res
}

我怎样才能在 Swift 中实现这一目标?谢谢。

标签: swift

解决方案


正如@Cristlik 所建议的,我决定添加一个扩展来读取和丢弃字节:

extension InputStream {
func skip(inputStream: InputStream, n: Int) throws-> Int {
    var remaining = n
    var nr = 0
    if n <= 0 {
        return 0
    }
    let maxSkipBufferSize = 2048
    let  size = min(maxSkipBufferSize, remaining)
    var skipBuffer = [UInt8](repeating: 0, count: size)
    while remaining > 0 {
        nr = inputStream.read(&skipBuffer, maxLength: min(size, remaining))
        if (nr < 0) {
            break
        }
        remaining -= nr
    }
    return n - remaining
}}

推荐阅读