kompresja

0

Szukam jakiegoś prostego sposobu na kompresje bezstratną tablicy double[,] i zapisanie do pliku.

0

zip?

0

na dzień dzisiejszy używam czegoś takiego:

            List<byte> list = new List<byte>();
            for (int i = 0; i < rozmiar; i++)
            {
                list.AddRange(BitConverter.GetBytes(l1d[i]));
            }
            for (int i = 0; i < rozmiar; i++)
            {
                list.AddRange(BitConverter.GetBytes(a1d[i]));
            }
            for (int i = 0; i < rozmiar; i++)
            {
                list.AddRange(BitConverter.GetBytes(b1d[i]));
            }
            MemoryStream memoryStream = new MemoryStream();
            GZipStream zipStream = new GZipStream(memoryStream, CompressionMode.Compress);
            zipStream.Write(list.ToArray(), 0, list.Count);
            FileStream fileStream = new FileStream("plik.rrr", FileMode.Create);
            fileStream.Write(memoryStream.GetBuffer(), 0, (int)memoryStream.Position);
            fileStream.Close();

ale poszukuje jakiegos lepszego sposobu.

0

A ten sposob jest dla Ciebie nieodpowiedni, bo...?

0
johny_bravo napisał(a)

A ten sposob jest dla Ciebie nieodpowiedni, bo...?
bo jest bardzo powolny i mysle ze to przez to kombinowanie z ta iloscia streamow i chyba zbedna lista.

0

No też mi się wydało to dziwną konstrukcją, ale nie wiem, jaki kod jest wcześniej.
No ale skoro sam się domyślasz, co jest źle, to czemu tego nie zmienisz?

0

Czym jest l1d, a1d i b1d? Zamiast listy mozesz uzyc drugiego MemoryStream.

0
somekind napisał(a)

No ale skoro sam się domyślasz, co jest źle, to czemu tego nie zmienisz?
ponieważ nie wiem co mogę poprawić i raczej pytałem bo liczyłem na jakieś całkiem inne rozwiązanie.

johny_bravo napisał(a)

Czym jest l1d, a1d i b1d?
to sa double[]

0

Hmm...
Nie wiem, czy jest sens kompresji do strumienia w pamięci, a potem zapisywania go na dysk. Ale na wszelki wypadek zakomentowana część kodu tak właśnie robi.

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;

namespace DoubleCompresionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"D:\double.bin";
            double[] pamparampam = new double[] { 7, 29, 666 };
            byte[] bytes = new byte[pamparampam.Length * sizeof(double)];
            Buffer.BlockCopy(pamparampam, 0, bytes, 0, bytes.Length);

            //using (MemoryStream ms = new MemoryStream())
            //{
            //    using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress))
            //    {
            //        zip.Write(bytes, 0, bytes.Length);
            //    }
            //    File.WriteAllBytes(path, ms.ToArray());
            //}

            using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                using (GZipStream zip = new GZipStream(fs, CompressionMode.Compress))
                {
                    zip.Write(bytes, 0, bytes.Length);
                }
            }
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1