kompresja

PI
  • Rejestracja:około 17 lat
  • Ostatnio:około 14 lat
0

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


johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:około 13 lat
0

zip?


You need to learn how to walk
before you can run
PI
  • Rejestracja:około 17 lat
  • Ostatnio:około 14 lat
0

na dzień dzisiejszy używam czegoś takiego:

Kopiuj
            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.


johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:około 13 lat
0

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


You need to learn how to walk
before you can run
PI
  • Rejestracja:około 17 lat
  • Ostatnio:około 14 lat
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.


somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:6 dni
  • Lokalizacja:Wrocław
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?

johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:około 13 lat
0

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


You need to learn how to walk
before you can run
PI
  • Rejestracja:około 17 lat
  • Ostatnio:około 14 lat
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[]


somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:6 dni
  • Lokalizacja:Wrocław
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.

Kopiuj
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);
                }
            }
        }
    }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.