【发布时间】:2018-06-16 14:51:46
【问题描述】:
我有一个解析二进制文件的代码。它使用Span<byte> 在函数之间传递数据块以避免不必要的内存分配。
简化示例:
class Reader {
bool IsCompressed { get; set; }
public byte[] Data { get; set; }
function ReadOnlySpan<byte> ReadBlock() {
...
}
public function Read() {
if (IsCompressed) {
Data = ???
} else {
Data = ReadBlock.ToArray();
}
}
我可以用Syste.IO.Compression.DeflateStream解压数据,但是这个类只接受Stream作为输入,所以我必须将ReadOnlySpan<byte>转换为流,从而为byte[]分配内存。
using(var stream = new MemoryStream(buffer.ToArray())) {
using(var deflateStream = new DeflateStream(stream, CompressionMode.Decompress)) {
Data = ... read from deflateStream
}
}
有没有办法将ReadOnlySpan<byte> 传递给DeflateStream 而不会分配不必要的内存?或者有没有其他库可以直接从ReadOnlySpan<byte>解压数据?
我正在使用 .NET Core 2.1.0-preview1-26103-03,但如果需要,我可以使用任何其他版本。
【问题讨论】: