1
ファイルストレージストリームが既に添付されているDataWriterがあります。どのように私は最初にメモリにデータを書きたいので、私はバイトのサイズを知ることができ、ライターにデータのサイズを格納することができます。MemoryStreamからDataWriterにディスクに書き込む方法
2つのメモリバッファを作成せずにどうすればいいですか?
DataWriter writer; // writer is parameter passed from somewhere else.
using (var inMemory = new InMemoryRandomAccessStream())
{
// fill inMemory with data.
// ***Here*** How can I avoid this?
var buffer = new byte[checked((int)inMemory.Position)].AsBuffer();
inMemory.Seek(0);
await inMemory.ReadAsync(buffer, buffer.Length, InputStreamOptions.ReadAhead);
writer.WriteUInt32(buffer.Length); // write size
writer.WriteBuffer(buffer); // write data
}
私が分かるように、私は2つのバッファを使用しています.1つはメモリストリーム用、もう1つはibufferです。
ファイル格納ストリームが既に添付されているDataWriterに、メモリ内容を直接書き込む方法がわかりません。
あなたはランダムアクセス(シーク可能)ストリーム、位置をマークしている場合は、0の長さを書き込み、ストリームに直接書き込むと、あなたはバイトだったどのように多くの知っていれば正しい値で長さを上書き書きました。注:私はUWPと 'DataWriter'について全く何も知っていません。これはあなたが一般的にそれをやっているところです。 –
@ JeroenMostert DataWriterにはシークメソッドがありません。基本ストリームはランダムアクセスとシークをサポートします。データライターはそれを包み込んでいるので、基になるストリームに直接アクセスすることはできません。 DataWriterはシーケンシャルライターで、ストリームにデータを書き込むための使いやすいメソッドを提供します(BinaryWriterなど)。これは独自のバッファを持ち、バッファを基になるストリームにコミットすることもできないこともあるので、シークはサポートされていません。 –