Log Service將日誌投遞到OSS時,支援通過Snappy壓縮OSS檔案。投遞成功後,您可以通過C++ Lib、Java Lib、Python Lib、Linux工具等方式解壓OSS檔案。
使用C++ Lib解壓
使用
Snappy.Uncompress
解壓。
使用Java Lib解壓
選擇以下任意一種方式下載Java Lib。
說明1.1.2.1版本存在Bug ,可能無法解壓部分壓縮檔。1.1.2.6及以上版本已修複該問題,建議您使用1.1.2.6及以上版本的Java Lib。關於該Bug的更多資訊,請參見bad handling of the MAGIC HEADER。
手動方式
Maven方式
<dependency> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> <version>1.0.4.1</version> <type>jar</type> <scope>compile</scope> </dependency>
使用以下任意一種方法解壓。
說明不支援使用SnappyFramedInputStream。
Snappy.Uncompress
範例程式碼如下:
String fileName = "C:\\我的下載\\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.SnappyInputStream
範例程式碼如下:
String fileName = "C:\\我的下載\\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)); }
使用Python Lib解壓
使用
snappy.uncompress
解壓。Python 2範例程式碼如下:
import snappy compressed = open('/tmp/temp.snappy').read() snappy.uncompress(compressed)
Python 3範例程式碼如下:
import snappy compressed = open('/tmp/temp.snappy','rb').read() print(snappy.uncompress(compressed).decode(encoding='utf-8',errors="ignore"))
說明如果您在Windows系統下,使用snappy.uncompress解壓出現報錯,例如
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence
,可能是Windows檔案系統以BOM開頭導致的。建議您使用類Unix系統或者在open函數的encoding中設定正確的檔案編碼。不支援通過以下命令列工具解壓snappy壓縮檔,命令列模式下僅支援hadoop模式(hadoop_stream_decompress)與流模式(stream_decompress)。
python -m snappy -d compressed_file.snappy uncompressed_file
使用開源PHP工具解壓
您可以使用開源的PHP工具解壓Snappy檔案。
您也可以執行以下命令列下載php-ext-snappy源碼。
git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.git
編譯源碼。
% cd php-ext-snappy % phpize % ./configure % make % make install
在php.ini檔案中配置擴充格式。
extension=snappy.so
完成以上配置後,就可以參考以下代碼壓縮和解壓snappy格式檔案。
$file_path = "test.snappy" ; if (file_exists($file_path)) { $str = file_get_contents($file_path); //將整個檔案內容讀入到一個字串中。 $uncompressed = snappy_uncompress($str); echo $uncompressed; }
更多參考
您可以訪問GitHub上Snappy的開源專案,擷取更多支援。更多資訊,請參見開源Snappy。