Simple Log ServiceからObject Storage Service (OSS) にデータを出荷する場合、Snappyを使用してデータを圧縮できます。 データがOSSに送信された後、解凍ツールを使用してデータを解凍できます。 解凍ツールには、C ++ 用のSnappyライブラリ、Java用のSnappyライブラリ、Python用のSnappyライブラリ、およびLinuxベースのSnappyツールが含まれます。
C ++ のためのSnappyライブラリ
SnappyからC ++ 用のSnappyライブラリをダウンロードしてインストールします。
snappy.uncompress
メソッドを使用して、Snappy圧縮ファイルを解凍します。
Java用のSnappyライブラリ
Java用のSnappyライブラリをダウンロードするには、次のいずれかの方法を選択します。
説明1.1.2.1のライブラリを使用すると、一部のSnappy圧縮ファイルが解凍されない場合があります。 この問題を防ぐために、1.1.2.6以降のライブラリを使用することを推奨します。 問題の詳細については、悪い取り扱いの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>
次のいずれかの方法を選択して、Snappy圧縮ファイルを解凍します。
説明SnappyFramedInputStreamはサポートされていません。
Snappy.Uncompress
サンプルコード:
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.SnappyInputStream
サンプルコード:
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)); }
Python用のSnappyライブラリ
Python-Snappyからpython用のsnappyライブラリをダウンロードしてインストールします。
snappy.uncompress
メソッドを使用して、Snappy圧縮ファイルを解凍します。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"))
説明snappy.uncompressメソッドを使用してWindowsシステムでファイルを解凍すると、エラーが発生する可能性があります。 たとえば、Windowsファイルシステムのファイルがバイト順序マーク (BOM) で始まるため、エラー
UnicodeDecodeError: 'gbk' コーデックが位置0: 不正なマルチバイトシーケンスでバイト0xffをデコードできません
。 UNIXライクなシステムを使用するか、open関数のencodingパラメーターに有効なエンコード形式を指定することを推奨します。次のコマンドは、Snappy圧縮されたOSSファイルの解凍には使用できません。 CLIを使用してデータを解凍する場合は、Hadoopモード (hadoop_stream_decompress) またはストリーミングモード (stream_decompress) を使用する必要があります。
python -m snappy -d compressed_file.snappy uncompressed_file
PHP用のオープンソースSnappyツール
PHP用のオープンソースのSnappyツールを使用して、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を使用してファイルを圧縮し、次のコードに基づいてSnappy圧縮ファイルを解凍できます。
$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; }
関連ドキュメント
Snappy関連のオープンソースプロジェクトは、GitHubで詳細なサポートを確認できます。 詳細については、「snappy」をご参照ください。