我通过外部附件框架打开了以下输入和输出流:
session = [[EASession alloc] initWithAccessory:acc forProtocol:protocol];
if (session){
[[session inputStream] setDelegate:self];
[[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[session inputStream] open];
[[session outputStream] setDelegate:self];
[[session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[session outputStream] open];
}
现在我有一个非常愚蠢的问题,因为我的大多数新手问题都是。如何将原始1字节数据发送到流?说,我想发送0x06。我该怎么做?
然后......如何从流中读取数据?我将被发回数据以逐字节处理...字节将是字节范围内的数字(0x00 - 0xFF)。
感谢您的耐心和帮助!
答案 0 :(得分:1)
逐字节写数据不是最有效的方法,但如果你坚持:
uint8_t aByte = 0x06;
if ([[session outputStream] write:&aByte maxLength:1] < 0)
/* handle error */;
同样,要逐字节读取:
uint8_t aByte;
NSInteger result = [[session inputStream] read:&aByte maxLength:1];
if (result > 0)
/* handle received byte */;
else if (result == 0)
/* handle end-of-stream */;
else
/* handle error */;
如果要读取或写入更大的数据块,请将指针传递给大于一个字节的缓冲区并指定长度。确保处理短读取和写入,其中返回代码为正但小于您指定的值。您需要等待流准备好更多并继续它停止的地方。对于阅读,您也可以使用-getBuffer:length:
,其中框架分配一个其选择长度的缓冲区。