Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
DeflateStream en GZipStream schrijf nu altijd kop- en voetteksten naar de uitvoerstroom, zelfs als er geen gegevens worden geschreven. Dit zorgt ervoor dat de uitvoer een geldige gecomprimeerde stroom is volgens de specificaties deflate en GZip.
Geïntroduceerde versie
.NET 11 Preview 1
Vorig gedrag
Voorheen produceerden DeflateStream en GZipStream geen output als er geen gegevens naar de stream werden geschreven. Dit heeft geresulteerd in een lege uitvoerstroom bij het comprimeren van een lege invoer.
using var output = new MemoryStream();
using (var deflate = new DeflateStream(output, CompressionMode.Compress))
{
// No data written.
}
Console.WriteLine(output.Length); // 0
Nieuw gedrag
Vanaf .NET 11 DeflateStream en GZipStream altijd de juiste kop- en voetteksten naar de uitvoerstroom schrijven, zelfs als er geen gegevens worden geschreven. Dit zorgt ervoor dat de uitvoer geldige gecomprimeerde gegevens bevat volgens de indelingsspecificaties.
using var output = new MemoryStream();
using (var deflate = new DeflateStream(output, CompressionMode.Compress))
{
// No data written.
}
Console.WriteLine(output.Length); // 2 (for Deflate) or 20 (for GZip).
Type van brekende verandering
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Deflate- en GZip-compressieindelingen omvatten scheidingstekens voor het begin en het einde van gecomprimeerde gegevens. De juiste manier om een lege nettolading met deze indelingen te comprimeren, bevat alleen de scheidingstekens. Sommige hulpprogramma's reageren niet correct op lege inhoud en verwachten altijd dat de gecomprimeerde inhoud ten minste de juiste kop- en voettekst bevat. Deze wijziging zorgt voor compatibiliteit met dergelijke hulpprogramma's en produceert correct opgemaakte gecomprimeerde streams volgens de specificaties.
Aanbevolen actie
Als het vorige gedrag gewenst is, behandel dan lege inhoud als een speciaal geval om het niet te comprimeren via DeflateStream of GZipStream.
byte[] dataToCompress = GetData();
if (dataToCompress.Length == 0)
{
// Don't compress empty data.
return Array.Empty<byte>();
}
using var output = new MemoryStream();
using (var deflate = new DeflateStream(output, CompressionMode.Compress))
{
deflate.Write(dataToCompress);
}
return output.ToArray();
Als u onderscheid wilt maken tussen lege en niet-lege gecomprimeerde streams, houd bij of er gegevens zijn geschreven of controleer de oorspronkelijke niet-gecomprimeerde gegevenslengte vóór compressie.