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 */;

より大きなデータのチャンクを読み書きする場合は、1バイトより大きいバッファーへのポインターを渡し、長さを指定します。戻りコードが正であるが指定した値よりも小さい場合は、必ず短い読み取りと書き込みを処理してください。ストリームの準備が整うのを待って、中断したところから続行する必要があります。読むため-getBuffer:length:に、フレームワークが選択した長さのバッファを割り当てる、を使用することもできます。

于 2012-06-23T19:46:49.117 に答える