すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Snappy圧縮ファイルの解凍ツール

最終更新日:Aug 30, 2024

Simple Log ServiceからObject Storage Service (OSS) にデータを出荷する場合、Snappyを使用してデータを圧縮できます。 データがOSSに送信された後、解凍ツールを使用してデータを解凍できます。 解凍ツールには、C ++ 用のSnappyライブラリ、Java用のSnappyライブラリ、Python用のSnappyライブラリ、およびLinuxベースのSnappyツールが含まれます。

C ++ のためのSnappyライブラリ

  1. SnappyからC ++ 用のSnappyライブラリをダウンロードしてインストールします。

  2. snappy.uncompressメソッドを使用して、Snappy圧縮ファイルを解凍します。

Java用のSnappyライブラリ

  1. Java用のSnappyライブラリをダウンロードするには、次のいずれかの方法を選択します。

    説明

    1.1.2.1のライブラリを使用すると、一部のSnappy圧縮ファイルが解凍されない場合があります。 この問題を防ぐために、1.1.2.6以降のライブラリを使用することを推奨します。 問題の詳細については、悪い取り扱いのMAGIC HEADERをご覧ください。

    • 次のリンクをクリックして、ライブラリを手動でダウンロードします。

      xerial snappy-java

    • 次の依存関係をMavenプロジェクトに追加して、ライブラリをダウンロードします。

      <dependency>
      <groupId>org.xerial.snappy</groupId>
      <artifactId>snappy-java</artifactId>
      <version>1.0.4.1</version>
      <type>jar</type>
      <scope>compile</scope>
      </dependency>
  2. 次のいずれかの方法を選択して、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ライブラリ

  1. Python-Snappyからpython用のsnappyライブラリをダウンロードしてインストールします。

  2. 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圧縮ファイルを解凍できます。

  1. php-ext-snappyからツールのソースコードをダウンロードします。

    次のコマンドを実行して、ソースコードをダウンロードすることもできます。

    git clone --recursive --depth=1 https://github.com/kjdev/php-ext-snappy.git
  2. ソースコードをコンパイルします。

    % cd php-ext-snappy
    % phpize
    % ./configure
    % make
    % make install
  3. 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」をご参照ください。