1

次のコードを使用して、メトロスタイルアプリのバイト配列からストリームを取得しようとしています。

InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream();
memoryStream.AsStreamForWrite().Write(byteArray, 0, byteArray.Length);
memoryStream.Seek(0);

エラーなしで実行されますが、ストリームサイズはゼロ(0)です。なぜそのサイズがゼロなのか誰か教えてもらえますか?

4

3 に答える 3

4

DataWriterクラスとDataReaderクラスを使用できます。例えば ​​...

// put bytes into the stream
var ms = new InMemoryRandomAccessStream();
var dw = new Windows.Storage.Streams.DataWriter(ms);
dw.WriteBytes(new byte[] { 0x00, 0x01, 0x02 });
await dw.StoreAsync();

// read them out
ms.Seek(0);
byte[] ob = new byte[ms.Size];
var dr = new Windows.Storage.Streams.DataReader(ms);
await dr.LoadAsync((uint)ms.Size);
dr.ReadBytes(ob);
于 2013-01-24T17:35:24.410 に答える
0

BinaryWriter / BinaryReaderを使用して、byte[]およびStreamsとの間で読み取りおよび書き込みを行うこともできます。

    private Stream ConvertToStream(byte[] raw)
    {
        Stream streamOutput = new MemoryStream();
        using (BinaryWriter writer = new BinaryWriter(streamOutput))
        {
            writer.Write(raw);
        }
        return streamOutput;
    }

もう1つのオプションは、Marc Gravellがすでに述べたように、組み込みの拡張メソッドを使用することです。

    private Stream ConvertToStream(byte[] raw)
    {
        return raw.AsBuffer().AsStream();
    }

拡張メソッドは[セキュリティクリティカル]でコメント化されており、後で変更される可能性があります。ただし、少し調べてみると、セキュリティコードのコメントに関する追加情報は見つかりませんでした。

于 2013-02-08T23:54:45.030 に答える
0

I know this is a very old question, but I was running into this issue myself today and figured it out so I'll leave this here for others.

I realized that the stream wasn't being written if it was too small. To fix this, I explicitly set the length of the stream like this:

ms.AsStreamForWrite(imageBytes.Length).Write(imageBytes, 0, imageBytes.Length);

That should be all you need.

于 2015-04-09T20:49:28.040 に答える