Al transferir datos de Simple Log Service a Object Storage Service (OSS), puede utilizar Snappy para comprimirlos. Una vez completada la transferencia, es posible descomprimir los archivos en OSS mediante bibliotecas de C++, Java o Python, así como con herramientas de Linux.
Biblioteca Snappy para C++
Descargue e instale Snappy para C++.
Invoque
snappy.uncompresspara descomprimir los archivos.
Biblioteca Snappy para Java
-
Descargue la biblioteca Snappy para Java.
NotaLa versión 1.1.2.1 podría fallar al descomprimir ciertos archivos debido a un manejo incorrecto del MAGIC HEADER. Utilice la versión 1.1.2.6 o posterior.
-
Descargue la biblioteca manualmente:
-
Agregue la siguiente dependencia a un proyecto Maven:
<dependency> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> <version>1.0.4.1</version> <type>jar</type> <scope>compile</scope> </dependency>
-
-
Descomprima los archivos mediante uno de los siguientes métodos.
NotaSnappyFramedInputStream no es compatible.
-
Snappy.uncompressCódigo de ejemplo:
String fileName = "C:\\Downloads\\36_1474212963188600684_4451886.snappy"; RandomAccessFile randomFile = new RandomAccessFile(fileName, "r"); int fileLength = (int) randomFile.length(); randomFile.seek(0); byte[] bytes = new byte[fileLength]; int byteread = randomFile.read(bytes); System.out.println(fileLength); System.out.println(byteread); byte[] uncompressed = Snappy.uncompress(bytes); String result = new String(uncompressed, "UTF-8"); System.out.println(result); -
Snappy.SnappyInputStreamCódigo de ejemplo:
String fileName = "C:\\Downloads\\36_1474212963188600684_4451886.snappy"; SnappyInputStream sis = new SnappyInputStream(new FileInputStream(fileName)); byte[] buffer = new byte[4096]; int len = 0; while ((len = sis.read(buffer)) != -1) { System.out.println(new String(buffer, 0, len)); }
-
Biblioteca Snappy para Python
Descargue e instale python-snappy.
-
Invoque
snappy.uncompresspara descomprimir los archivos.-
Código de ejemplo para Python 2:
import snappy compressed = open('/tmp/temp.snappy').read() snappy.uncompress(compressed) -
Código de ejemplo para Python 3:
import snappy compressed = open('/tmp/temp.snappy','rb').read() print(snappy.uncompress(compressed).decode(encoding='utf-8',errors="ignore"))
NotaEn Windows, la descompresión puede fallar con el error
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequencedebido a la codificación de marca de orden de bytes (BOM). Utilice un sistema tipo UNIX o especifique una codificación válida en la función open.-
La siguiente herramienta de línea de comandos no admite la descompresión de archivos comprimidos con Snappy. En modo CLI, solo se admiten
hadoop_stream_decompressystream_decompress.python -m snappy -d compressed_file.snappy uncompressed_file
-
Herramienta Snappy de código abierto para PHP
Utilice la extensión php-ext-snappy para descomprimir archivos Snappy.
-
Descargue el código fuente desde php-ext-snappy.
Como alternativa, clone el repositorio:
git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.git -
Compile el código fuente.
% cd php-ext-snappy % phpize % ./configure % make % make install -
Agregue la extensión al archivo php.ini.
extension=snappy.soUna vez completada la configuración, podrá comprimir y descomprimir archivos Snappy. Código de ejemplo:
$file_path = "test.snappy" ; if (file_exists($file_path)) { $str = file_get_contents($file_path); // Read the content of the file into a string. $uncompressed = snappy_uncompress($str); echo $uncompressed; }
Referencias
Encontrará más recursos sobre Snappy en google/snappy.