Hay una compresión de la API disponible para su uso en el iPhone? Estamos construyendo algunos de los servicios web RESTful para nuestra aplicación para el iPhone para hablar, pero queremos comprimir al menos algunas de las conversaciones para la eficiencia.

No me importa cuál sea el formato (ZIP, LHA, lo que sea) es, y no necesita estar seguro.

Algunos de los encuestados han señalado que el servidor puede comprimir su salida, y el iPhone se puede consumir que. El escenario que tenemos es exactamente la inversa. Vamos a Publicar el contenido comprimido a el servicio web. No estamos preocupados con la compresión va para otro lado.

7 Comentarios

  1. 12

    zlib y bzip2 están disponibles. Y siempre se puede añadir otros, como siempre que voy (en general) compilar en OS X.

    bzip2 es una mejor opción para los tamaños de archivo más pequeños, pero requiere mucha más potencia de CPU para comprimir y descomprimir.

    También, ya que estamos hablando de un servicio web, puede que no tenga que hacer mucho. NSURLRequest acepta la codificación gzip de forma transparente en las respuestas del servidor.

    • En realidad, bzip2 requiere más memoria, a continuación, un poco más de la CPU, que es la razón por la que me gustaría ir con gzip/deflate (zlib).
    • No estamos preocupados acerca de la compresión que viene desde el servidor. Estamos preocupados acerca de la compresión DE ir al servidor. He editado mi pregunta para reflejar esto.
    • bzip2 parece estar disponibles en el dispositivo, pero los encabezados faltan. Al parecer, algunas apps me rechazaron el uso de estos «privado» Api…
  2. 8

    De Apple integrado en libcompression ahora está disponible para iOS 9. Un breve ejemplo de compression_encode_buffer se muestra a continuación para la compresión de NSData.

    @import Compression;
    
    NSData *theData = [NSData dataWithContentsOfFile:[<some file> path]];
    size_t theDataSize = [theData length];
    const uint8_t *buf = (const uint8_t *)[theData bytes];
    uint8_t *destBuf = malloc(sizeof(uint8_t) * theDataSize);
    size_t compressedSize = compression_encode_buffer(destBuf, theDataSize, buf, theDataSize, NULL, COMPRESSION_LZFSE);
    self.<NSData item> = [NSData dataWithBytes:destBuf length:compressedSize];
    
    NSLog(@"originalsize:%zu compressed:%zu", theDataSize, compressedSize);
    free(destBuf);

    Un número de diferentes algoritmos disponibles:

    • LZMA
    • LZ4
    • ZLIB
    • LZFSE

    Bloque de compresión o compresión de secuencias de ambos son compatibles.

    Ver https://developer.apple.com/library/mac/documentation/Performance/Reference/Compression/

    • Es posible establecer una contraseña para la compresión con este método?
  3. 4

    Si usted tiene sólo datos comprimidos y saben tamaño sin comprimir puede utilizar:

    #import "zlib.h"
    
    
    int datal = [zipedData length];
    Bytef *buffer[uncompressedSize];
    Bytef *dataa[datal];
    
    [zipedData getBytes:dataa];
    
    Long *ld;
    
    uLong sl = datal;
    *ld = uncompressedSize;
    if(uncompress(buffer, ld, dataa, sl) == Z_OK)
    {
    NSData *uncompressedData = [NSData dataWithBytes:buffer length:uncompressedSize];
    NSString *txtFile = [[NSString alloc] initWithData:uncompressedData encoding:NSUTF8StringEncoding];
    }
  4. 0

    NSURL dice que es compatible con la codificación gzip, así que no tiene que hacer nada más que tener su servicio web RESTful de retorno gzip contenido codificado cuando sea apropiado. Toda la decodificación se realiza bajo las cubiertas.

Dejar respuesta

Please enter your comment!
Please enter your name here