【发布时间】:2017-09-27 09:30:49
【问题描述】:
我的 DataWriter 已经附加了文件存储流。在特定情况下,我想先将数据写入内存,以便知道字节的大小,然后将大小与数据一起存储在写入器中。
如何在不创建两个内存缓冲区的情况下做到这一点?
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
}
如您所见,我使用了两个缓冲区,一个用于内存流,另一个用于 ibuffer。
我不知道如何将 inMemory 的内容直接写入已经附加了文件存储流的 DataWriter 中。
【问题讨论】:
-
如果你有一个随机访问(可搜索的)流,标记位置,写入长度为 0,将字节直接写入流,然后在知道有多少后用正确的值覆盖长度字节被写入。注意:我对 UWP 和
DataWriter一无所知,这就是你一般的做法。 -
@JeroenMostert DataWriter 没有 seek 方法。底层流支持随机访问和查找。但是数据写入器是围绕它的包装器,所以我无法直接访问底层流。 DataWriter 是顺序写入器,它提供了易于使用的方法将数据写入流,(如 BinaryWriter)。它有自己的缓冲区,可能会也可能不会将缓冲区提交到底层流中,所以我想这就是不支持搜索的原因。
标签: c# uwp datawriter