通过NSInputStream / NSOutputStream传输多个图像

时间:2013-02-06 11:44:28

标签: ios image nsstream nsinputstream nsoutputstream

我有两个NSInputStreamNSOutputStream通过网络相互连接。我想将核心数据对象和相关图像从一个设备传输到其他设备。我已成功将核心数据对象转换为JSON并转移到流的另一端,然后从JSON填充核心数据。现在有一些图像与每个记录相关联。图像在光盘上,只有路径存储在核心数据对象中。现在,当您写入output stream时,您必须掌握完整的数据。我已准备好XML(包含JSON)。
1.但是如何传输图像(NSData *)和XML(还有NSData *)?我将如何区分XML和图像之间的读取端({{​​1}})?
2.此外,我必须传输多个图像,我们如何在NSInputStream端告诉图像的字节已经完成并且下一个图像的字节已经开始了?
3.我们如何知道哪个图像(名称)已被转移?
感谢

3 个答案:

答案 0 :(得分:0)

NSData(每个UIImage)转换为NSString表示,然后将所有NSString个对象放入NSDictionary并序列化该字典。通过这种方式,当您传输数据时,可以反转过程以提取图像,知道哪个关键点指向哪个图像。这样你就可以传输多个图像。

希望这有帮助。

干杯

答案 1 :(得分:0)

我通过以下步骤解决了这个问题:
1.将每个管理对象转换为NSDictionary
2.将所有词典都放在NSArray中 3.使用NSArray
NSData转换为NSKeyedArchiver 4.通过流传输NSData

在接收方的最后,我颠倒了上面的步骤 谢谢Marius Kurgonas

答案 2 :(得分:0)

听起来很荒谬,每一个答案。尝试这样的事情:

(x, y, z) == ("no", "no", "yes")

...

case NSStreamEventHasBytesAvailable: {
            NSLog(@"NSStreamEventHasBytesAvailable");
            uint8_t * mbuf[DATA_LENGTH];
            mlen = [(NSInputStream *)stream read:(uint8_t *)mbuf maxLength:DATA_LENGTH];
            NSLog(@"mlen == %lu", mlen);
            [mdata appendBytes:(const void *)mbuf length:mlen];
            NSLog(@"mdata length == %lu", mdata.length);
            if (mlen < DATA_LENGTH) {
                NSLog(@"displayImage");
                UIImage *image = [UIImage imageWithData:mdata];
                [self.peerConnectionViewController.view.subviews[0].layer setContents:(__bridge id)image.CGImage];
                mdata = nil;
                mlen  = DATA_LENGTH;
                mdata = [[NSMutableData alloc] init];
            }
        } break;