我想将图像文件从android服务器发送到iOS客户端。我正在使用swift语言和套接字编程(ip-port)。有联系。我发送/获取字符串数据,但我无法获取图像文件。我怎样才能快速获得图像文件?
if aStream == self.inputStream{
var buffer: UInt8 = 0
var len: Int!
while (inputStream?.hasBytesAvailable != nil){
len = inputStream?.read(&buffer, maxLength: 2048)
if len > 0{
var output = NSData(bytes: &buffer, length: len)
if output != nil{
var img = UIImage(data: output) //Error !!!
}
}
}
}
答案 0 :(得分:0)
InputStream
无法一次获取所有数据;所以你需要在整个迭代过程中用NSMutableData对象追加字节,直到hasBytesAvailable
属性为false。这意味着您没有剩余字节,您获得了所需的所有图像数据。顺便提一句下面的代码是Swift 3.0。
var data = NSMutableData()
fileprivate func handleIncomingMessage(_ stream:Stream) {
if stream === inputStream {
let bufferSize = 1024
var buffer = Array<UInt8>(repeating: 0, count: bufferSize))
while(inputStream.hasBytesAvailable) {
let bytesRead = inputStream.read(&buffer, maxLength: bufferSize)
if bytesRead >= 0 {
data.append(&buffer, length: bytesRead)
}else {
if bytesRead == -1 {
//TODO: Server closed.
ITLog.info("Server closed")
}
}
}
// `NSMutableData` object now has valid image bytes.
// Create an UIImage with `data` object.
let image = UIImage(data: data)
clearSocketData()
}
}
fileprivate func clearSocketData() {
data = NSMutableData()
}