C# 在binarywriter中访问基本内存流[用于读取]

C# 在binarywriter中访问基本内存流[用于读取],c#,memorystream,binarywriter,C#,Memorystream,Binarywriter,我有一个由memorystream支持的binarywriter: BinaryWriter m_binaryWriter = new BinaryWriter(new MemoryStream(BUFFER_SIZE)); 我想获取基本读取器并将其读入字节数组: long DataLength = m_binaryWriter.BaseStream.Length; byte[] MemoryStrData = new byte[DataLength]; int BytesRead = m_b

我有一个由memorystream支持的binarywriter:

BinaryWriter m_binaryWriter = new BinaryWriter(new MemoryStream(BUFFER_SIZE));
我想获取基本读取器并将其读入字节数组:

long DataLength = m_binaryWriter.BaseStream.Length;
byte[] MemoryStrData = new byte[DataLength];
int BytesRead = m_binaryWriter.BaseStream.Read(MemoryStrData, 0, (int)DataLength);

然而,字节读取总是0(显然,MemoryStarData包含所有0)。我曾尝试使用BinaryReader从基流中读取流,但结果是相同的。我在这里遗漏了什么吗?

您是否总是知道BinaryWriter将由MemoryStream支持


如果是这样,请保留对MemoryStream的引用,或者根据需要强制转换基流,然后使用获取MemoryStream内容的字节数组。

您总是知道BinaryWriter将由MemoryStream支持吗


如果是这样,请保留对MemoryStream的引用,或者根据需要强制转换基流,然后使用获取MemoryStream内容的字节数组。

我解决了它。BinaryWriter的当前索引似乎与其后端流的位置不同!我认为获得一个基流句柄,然后执行.read(OutputArray、Index、Count)就足够了,但您需要在BinaryWriter本身上执行搜索:

m_binaryWriter.Seek(0, SeekOrigin.Begin);

我解决了。BinaryWriter的当前索引似乎与其后端流的位置不同!我认为获得一个基流句柄,然后执行.read(OutputArray、Index、Count)就足够了,但您需要在BinaryWriter本身上执行搜索:

m_binaryWriter.Seek(0, SeekOrigin.Begin);

你确定你不是在找一个
BinaryReader
而不是
BinaryWriter
?是的,我正在将数据写入binarywriter,但希望访问一个连续块(一旦它超过缓冲区大小)。您最好实现从
流派生的自定义类,并实现任何奇怪的缓冲/部分提交/日志记录(通过从流中读取随机块)在你的班里…你确定你不是在找一个
BinaryReader
而不是
BinaryWriter
?是的,我正在将数据写入binarywriter,但希望访问一个连续的块(一旦它超过缓冲区大小)。您最好实现从
流派生的自定义类,并在类内部实现任何奇怪的缓冲/部分提交/日志记录(通过从流中读取随机块实现的任何内容)…是的,它将始终由memorystream支持。当达到缓冲区大小时,我清除binarywriter并处理后端。接下来我重新创建它。我认为Compact框架不支持.ToArray(),但我可以检查一下。根据文档,至少在.NET3.5中支持它。我对.NET Compact Framework了解不多,所以请确认是否有机会。谢谢你的建议。紧凑框架中既没有名为.ToArray()的成员,也没有名为MemoryStream.ToArray()的工厂。正是因为这个原因,我才使用.Read()。现在,我很好奇是否必须用后端字节数组初始化MemoryStream。我知道有一个重载有一个“bool WriteAble”标志。这需要设置吗?另一点值得注意的是,当我写入它时,内存流的长度确实会增加…我不明白为什么您找不到.ToArray()。文档中说它在.NET Compact Framework 1、2和3.5中受支持。是的,它将始终由memorystream支持。当达到缓冲区大小时,我清除binarywriter并处理后端。接下来我重新创建它。我认为Compact框架不支持.ToArray(),但我可以检查一下。根据文档,至少在.NET3.5中支持它。我对.NET Compact Framework了解不多,所以请确认是否有机会。谢谢你的建议。紧凑框架中既没有名为.ToArray()的成员,也没有名为MemoryStream.ToArray()的工厂。正是因为这个原因,我才使用.Read()。现在,我很好奇是否必须用后端字节数组初始化MemoryStream。我知道有一个重载有一个“bool WriteAble”标志。这需要设置吗?另一点值得注意的是,当我写入它时,内存流的长度确实会增加…我不明白为什么您找不到.ToArray()。该文档称其在.NET Compact Framework 1、2和3.5中受支持。