Saya mencoba untuk mengompres array byte menggunakan deflatestream. Setelah memeras data, saya sedang mencari cara untuk menutup kompresi (tandai seperti yang dilakukan). Pada awalnya, saya mencoba membuang () lalu tutup (), tetapi mereka membuat hasil memori yang tidak dapat dibaca. Maka saya pikir saya mungkin perlu menyiram (), tetapi deskripsi mengatakan "Implementasi saat ini dari metode ini tidak memiliki fungsionalitas"

enter image description here

Tapi sepertinya tanpa flush (), hasilnya sepertinya kosong. Apa artinya bahwa "Implementasi saat ini dari metode ini tidak memiliki fungsionalitas"?

    static void Main(string[] args)
    {
        byte[] result = Encoding.UTF8.GetBytes("わたしのこいはみなみのかぜにのってはしるわ");
        var output = new MemoryStream();
        var dstream = new DeflateStream(output, CompressionLevel.Optimal);
        dstream.Write(result, 0, result.Length);
        var compressedSize1 = output.Position;
        dstream.Flush();
        var compressedSize2 = output.Position;

enter image description here

2
Damn Vegetables 5 April 2021, 06:34

1 menjawab

Jawaban Terbaik

Apa artinya bahwa "Implementasi saat ini dari metode ini tidak memiliki fungsionalitas"?

Artinya: itu tidak melakukan apa-apa, jadi menelepon Flush() dengan sendirinya tidak akan membantu. Anda perlu menutup aliran deflate untuk menyelesaikannya menulis apa yang dibutuhkan, tetapi tanpa menutup aliran yang mendasarinya (blok akan ditulis saat Anda menulis ke aliran, karena buffer internal mengisi - tetapi blok parsial akhir tidak dapat ditulis sampai Data siap diakhiri; tidak semua urutan kompresi mendukung dapat menyiram pada titik sewenang-wenang dan kemudian melanjutkan data terkompresi di blok tambahan)

Yang mungkin Anda inginkan adalah:

using (var dstream = new DeflateStream(output, CompressionLevel.Optimal, true))
{
  // Your deflate code
}
// Now check the memory stream

Perhatikan penggunaan parameter bool leaveOpen ekstra.

2
Marc Gravell 5 April 2021, 05:09