c# video - La forma más fácil de comprimir en Python y descomprimir con descompresión C # (y viceversa)




2 Answers

El BZip2 de SharpZipLib y la biblioteca de Python funcionó para mí. Esto es lo que probé y cómo:

Primero, el programa C # (haciendo referencia a SharpZipLib):

using System;
using ICSharpCode.SharpZipLib.BZip2;
using System.IO;

namespace Test
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            var fStream = new FileStream("/home/konrad/output.bin", FileMode.Create);
            using(var writer = new StreamWriter(new BZip2OutputStream(fStream)))
            {
                for(var i = 0; i < 10; i++)
                {
                    writer.WriteLine("Line no {0}.", i);
                }
            }
        }
    }

}

Entonces Python:

from bz2 import BZ2File
import sys

f = BZ2File("/home/konrad/output.bin")
for line in f.readlines():
    sys.stdout.write(line)

A continuación, se ejecuta el programa C #. Y después de eso:

$ python ctest.py
Line no 0.
Line no 1.
Line no 2.
Line no 3.
Line no 4.
Line no 5.
Line no 6.
Line no 7.
Line no 8.
Line no 9.

Supongo que funciona al revés también.

instalar abre

Tengo un programa con un cliente basado en Mono C # y un servidor Python, que se comunican a través de un socket TCP / IP. Los mensajes usan un formato mayormente binario, pero la parte más grande de cada mensaje generalmente está integrada en cadenas UTF-8 (en inglés). Cada mensaje es típicamente corto (menos de 100 bytes) pero algunos pueden ser más largos (hasta 64K). Se intercambian muchos datos y me gustaría reducir el tamaño de los mensajes y el uso del ancho de banda al comprimir los datos cuando se transmiten.

Mi investigación inicial no ha encontrado nada que sea obviamente compatible en las 2 bibliotecas estándar. Python tiene una librería zlib pero no puedo usar C ++ ' DeflateStream o GZipStream (ya que requieren una DLL externa que no tengo disponible) y no parece funcionar con ZipOutputStream de SharpZipLib (dando "error -3 - incorrecto respuestas del encabezado). (Aquellos que no usan Mono podrían tener más suerte; consulte la respuesta de Duncan a continuación).

Me interesaría conocer formas sencillas de habilitar la compresión sobre este enlace de comunicaciones, teniendo en cuenta que cualquier solución que pueda ser fácil de implementar en un idioma debe tener un equivalente en el otro. Aceptaría una solución especializada para las cadenas UTF-8 en lugar de los mensajes binarios, aunque la preferencia sería comprimir todo el flujo de bytes.

Idealmente, me gustaría mantener las dependencias externas al mínimo, pero me doy cuenta de que puede que no sea práctico.

ACTUALIZACIÓN: habiendo probado con SharpZipLib y encontrado errores repetidos en el lado de decodificación de Python, realmente podría hacer con sugerencias concretas con código que se sabe que funciona en lugar de solo sugerencias de bibliotecas de compresión para un idioma u otro.




Parece que estás en los sistemas * nix. Si ese es el caso y todos los otros métodos fallaron, simplemente puede usar las bibliotecas del sistema (Mono.Unix.Native) y no necesita preocuparse por encontrar las bibliotecas .Net correctas.




Related

c# .net python mono compression