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