Ao enviar dados do Simple Log Service para o Object Storage Service (OSS), você pode usar o Snappy para compactá-los. Após o envio, descompacte os arquivos no OSS com bibliotecas C++, Java, Python ou ferramentas Linux.
Biblioteca Snappy para C++
Baixe e instale o Snappy para C++.
Chame
snappy.uncompresspara descompactar os arquivos.
Biblioteca Snappy para Java
-
Baixe a biblioteca Snappy para Java.
NotaA versão 1.1.2.1 pode falhar ao descompactar alguns arquivos devido ao tratamento incorreto do MAGIC HEADER. Use a versão 1.1.2.6 ou posterior.
-
Baixe a biblioteca manualmente:
-
Adicione a seguinte dependência a um projeto Maven:
<dependency> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> <version>1.0.4.1</version> <type>jar</type> <scope>compile</scope> </dependency>
-
-
Descompacte os arquivos com um dos métodos a seguir.
NotaO SnappyFramedInputStream não é compatível.
-
Snappy.uncompressExemplo de código:
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.SnappyInputStreamExemplo de código:
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
Baixe e instale o python-snappy.
-
Chame
snappy.uncompresspara descompactar os arquivos.-
Exemplo de código para Python 2:
import snappy compressed = open('/tmp/temp.snappy').read() snappy.uncompress(compressed) -
Exemplo de código para Python 3:
import snappy compressed = open('/tmp/temp.snappy','rb').read() print(snappy.uncompress(compressed).decode(encoding='utf-8',errors="ignore"))
NotaNo Windows, a descompactação pode falhar com
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequencedevido à codificação BOM (byte order mark). Use um sistema semelhante ao UNIX ou especifique uma codificação válida na função open.-
A ferramenta de linha de comando a seguir não oferece suporte à descompactação de arquivos comprimidos com Snappy. No modo CLI, apenas
hadoop_stream_decompressestream_decompresssão compatíveis.python -m snappy -d compressed_file.snappy uncompressed_file
-
Ferramenta Snappy open source para PHP
Use a extensão php-ext-snappy para descompactar arquivos Snappy.
-
Baixe o source em php-ext-snappy.
Como alternativa, clone o repositório:
git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.git -
Compile o source.
% cd php-ext-snappy % phpize % ./configure % make % make install -
Adicione a extensão ao arquivo php.ini.
extension=snappy.soApós a configuração, compacte e descompacte arquivos Snappy. Exemplo de código:
$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; }
Referências
Consulte mais recursos sobre o Snappy em google/snappy.