无法将我的 ImageView 更改为从 Swift 中的流检索的数据

Can't change my ImageView to data retrieved from stream in Swift

我正在尝试通过输入流检索图片,然后将我的 ImageView 设置为该图片。下面是我如何检索输入流和读取数据的代码。

 let bufferSize = 1024
    var buffer = Array<UInt8>(repeating: 0, count: bufferSize)

    while (inputStream.hasBytesAvailable){
        let len = inputStream.read(&buffer, maxLength: buffer.count)
        if(len > 0){
            let imageData = NSData(bytes: &buffer, length: buffer.count)
            print("\(imageData)")
            let newImage = UIImage(data: imageData as Data)
            ImageView.image = newImage
        }
    }

我正在使用 CFStream 作为接收数据的套接字。所有这些工作正常,因为我能够发送和接收所有其他数据,但由于某种原因,图片不能。

非常感谢。

更新。

下面的代码没有抛出任何错误,但图片仍然没有显示。我的服务器代码有什么问题吗?

        f = open("/home/pi/Documents/server/foo.jpg", "rb")
        byte = f.read()
        print "Done reading"
        self.transport.write(byte)
        f.close()
        print "Done sending" 

服务器代码是用 Twisted Python 编写的,并且连接正常工作,因为我能够传输图片以外的其他消息。

所以,要将数据片段累积成一个Data,需要这样写:

    let bufferSize = 1024
    var buffer = Array<UInt8>(repeating: 0, count: bufferSize)
    //You need to assign an actual Data to the variable.
    //With initial value given, you have no need to work with Optionals.
    var imageData = Data()
    while (inputStream.hasBytesAvailable){
        let len = inputStream.read(&buffer, maxLength: buffer.count)
        if(len > 0){
            imageData.append(&buffer, count: buffer.count)
        }
    }
    //You need to try converting the data to image after reading all data fragments.
    let newImage = UIImage(data: imageData)
    pictureView.image = newImage

如果您发现此代码存在其他问题,请作为对此答案的评论报告。

我的错误是没有发送文件的每个字节。当我将服务器代码更改为:

with open("/home/pi/Documents/server/foo.jpg", "rb") as f:
    byte = f.read()
    print "Done reading"
    while byte:
        self.transport.write(byte)
        byte = f.read(1)
    print "Done sending"
f.close() 

它运行良好。但是,我会接受下面的答案,因为我将数据读入新图像文件的方式也可能存在问题。