0

我通过外部附件框架打开了以下输入和输出流:

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)内的数字。

感谢您的耐心和帮助!

4

1 回答 1

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:,其中框架分配一个其选择长度的缓冲区。

于 2012-06-23T19:46:49.117 回答