バイト配列のバイト数が不明確なIObservable<byte[]>
があります。私はそれをどのようにして、それぞれのバイト配列のバイト量を指定してIObservable<byte[]>
を返すかを知りたいです。一度に10バイトを必要とすると仮定しましょう。不規則な長さのバイト配列を持つIOBservable <byte[]>をIObservableに変換する<byte[]>通常の長さの配列を持つ
{1, 2, 3, 4}
{5, 6}
{7, 8, 9}
{10}
{11, 12, 13, 14, 15}
{16}
{17, 18}
{19, 20}
Bytes.Subscribe(b => Console.WriteLine(b.Length));
出力は私が望む何
3
2
3
1
5
1
2
2
だろうに、上記の入力を変換することです:私は、次の入力を取得する場合、私は購読した場合、と言うことですが
この:
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
Bytes.<WhateverItTakesToDoThat>.Subscribe(b => Console.WriteLine(b.Length));
出力は次のようになり
012バイトの量は単一の出力パケットよりも大きいことに来れば10
10
また、すなわち、働かなければなりません:
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}
{33, 34, 35, 36, 37, 38, 39, 40, 41}
{42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52}
は
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30}
{31, 32, 33, 34, 35, 36, 37, 38, 39, 40}
{41, 42, 43, 44, 45, 46, 47, 48, 49, 50}
(および上保持することにオンにする必要があり〜{51,52}、より多くの入力が来るのを待つ)
を受信する私のバージョンでは(1.0.10621)SelectManyは唯一のものとはIEnumerableをを返し、IEnumerableを<>はバッファ拡張メソッドを持っていないので、私は間ToObservable()の呼び出しを追加する必要がありましたSelectMany()およびBuffer()。その後、それは美しく動作します、ありがとうございます。 :-) –
Alex
@Alex - それは、 'Bytes'が' IEnumerable 'であり、' IObservable 'ではないことが示唆していることを意味します。 'SelectMany'の前に' ToObservable'を置いてみてください。それもうまくいくはずです。 –
Enigmativity
ええ、そうです。それは私のせいだ;テスト中にIEnumerableを使用してToObservable()を最初に実行したことを覚えなくても入力を偽装しました。実際の入力はIObservable に直接なります。誤解をおかけして申し訳ありません。 :-) –
Alex