elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  DeflateStream - Extraña Perdida de Datos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: DeflateStream - Extraña Perdida de Datos  (Leído 1,508 veces)
Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
DeflateStream - Extraña Perdida de Datos
« en: 23 Junio 2012, 21:30 pm »

Estoy diseñando una clase que guarda información en un archivo y utiliza DeflateStream como método de compresión, no hay casi información de como comprimir datos en forma de Bytes(), hay mucha documentación de ir directamente al trabajo con archivos, entonces diseñe esta función que al parecer funciona correctamente, pero se pierden algunos Bytes del final de la información comprimida y no encuentro el error por ningún lado, quizás es mal uso de DeflateStream.

Para probar la perdida de los datos hice esta prueba:

Código
  1. Imports System.IO, System.IO.Compression, System.Text, System.Security.Cryptography
  2.  
  3. Module Module1
  4.  
  5. #Region " Algoritmo de DeCompresión Deflate "
  6.  
  7.    Public Function DeflateDeCompress(ByVal Data As Byte(), _
  8.                                      ByVal Action As CompressionMode) As Byte()
  9.  
  10.        DeflateDeCompress = Nothing
  11.  
  12.        Dim ResultStream As MemoryStream = Nothing
  13.        Dim DeCompresser As DeflateStream = Nothing
  14.        Dim A As Integer, B As New List(Of Byte)
  15.  
  16.        Try
  17.  
  18.            If Action = CompressionMode.Compress Then
  19.                ResultStream = New MemoryStream
  20.                DeCompresser = New DeflateStream(ResultStream, CompressionMode.Compress)
  21.                DeCompresser.Write(Data, 0, Data.Length)
  22.                ResultStream.Position = 0
  23.                DeflateDeCompress = ResultStream.ToArray
  24.            Else
  25.                ResultStream = New MemoryStream(Data)
  26.                ResultStream.Position = 0
  27.                DeCompresser = New DeflateStream(ResultStream, CompressionMode.Decompress)
  28.                DeflateDeCompress = New Byte() {}
  29.  
  30.                DeCompresser.ReadByte() : A = DeCompresser.ReadByte
  31.  
  32.                While A <> -1
  33.                    B.Add(CByte(A))
  34.                    A = DeCompresser.ReadByte
  35.                End While
  36.  
  37.                DeflateDeCompress = B.ToArray : B.Clear()
  38.  
  39.            End If
  40.  
  41.            If DeCompresser IsNot Nothing Then
  42.                DeCompresser.Dispose()
  43.            End If
  44.  
  45.            If ResultStream IsNot Nothing Then
  46.                ResultStream.Dispose()
  47.            End If
  48.  
  49.        Catch ex As Exception
  50.            Return Nothing
  51.        End Try
  52.  
  53.    End Function
  54.  
  55. #End Region
  56.  
  57.    Public Function MD5_String(ByVal Data As Byte()) As String
  58.  
  59.        Return BitConverter.ToString(MD5.Create.ComputeHash(Data)).Replace("-", "").ToLower
  60.  
  61.    End Function
  62.  
  63.    Sub Main()
  64.  
  65.        Dim x As String = "C:\ejemplo.txt"
  66.        Dim y As Byte() = File.ReadAllBytes(x)
  67.        Dim z As Byte() = DeflateDeCompress(y, CompressionMode.Compress)
  68.        Dim a As Byte() = DeflateDeCompress(z, CompressionMode.Decompress)
  69.  
  70.        Console.WriteLine("Archivo de Entrada: {0}", x)
  71.        Console.WriteLine("Tamaño de Entrada: {0} bytes", y.Length)
  72.        Console.WriteLine("MD5-{0}", MD5_String(y))
  73.        Console.WriteLine()
  74.        Console.WriteLine("Tamaño Comprimido: {0} bytes ({1}%)", z.Length, Math.Round(z.Length / y.Length * 100 - 100, 2))
  75.        Console.WriteLine("MD5-{0}", MD5_String(z))
  76.        Console.WriteLine()
  77.        Console.WriteLine("Tamaño Descomprimido: {0} bytes", a.Length)
  78.        Console.WriteLine("MD5-{0}", MD5_String(a))
  79.        Console.WriteLine()
  80.        Console.WriteLine("Perdida de {0} bytes", y.Length - a.Length)
  81.  
  82.        Erase y, z, a
  83.  
  84.        Console.Read()
  85.  
  86.    End Sub
  87.  
  88. End Module
  89.  

Gracias de antemano :)


« Última modificación: 23 Junio 2012, 22:07 pm por Keyen Night » En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Disco Duro: Pérdida Datos
Hardware
farresito 2 3,094 Último mensaje 8 Julio 2010, 17:29 pm
por farresito
Todos mis datos se fueron a 0 kb ... de forma extraña
Windows
morenochico 3 2,492 Último mensaje 29 Noviembre 2011, 06:48 am
por Randomize
error de instalación con W8.1, perdida de datos
Windows
solkan05 2 1,923 Último mensaje 16 Octubre 2013, 17:42 pm
por solkan05
Los errores de los administradores de TI aumentan la pérdida de datos en ...
Noticias
wolfbcn 0 956 Último mensaje 16 Junio 2015, 21:48 pm
por wolfbcn
pérdida de datos
Dudas Generales
akesha 6 2,872 Último mensaje 24 Enero 2018, 19:38 pm
por WillBourbaki
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines