swift - 如何在 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 中实现这一目标?谢谢。
解决方案
正如@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
}}
推荐阅读
- json - 多行 JSON 未解析
- pdf - jpanel中如何解决itext pdf土耳其字符问题
- android - 如何使用不同的包名称使 android 应用程序重新安装自身?
- php - 我的 SQL Count GroupBy 查询的 laravel 雄辩的等价物是什么?
- javascript - 如何减少调用useEffect的次数?
- ruby-on-rails - 在 Rails 中设计电子邮件路由到 ip 而不是域名
- java - JAR 用值替换常量
- c# - 如何检查方法中是否删除了新参数?
- couchdb - PouchDB bulkdocs 不会重新添加带有 {new_edits:false} 的文档,如果它之前被删除
- java - 为什么当我们单独安装 64 个 java 时我的应用程序崩溃