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

Simple Log Service:Snappy 圧縮ファイル用の展開ツール

最終更新日:Jun 06, 2025

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

重要

OSS へのログ送信の旧バージョンは廃止されました。新バージョンを参照してください。

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"))
    説明
    • Windows システムで snappy.uncompress メソッドを使用してファイルを展開すると、エラーが発生する場合があります。たとえば、Windows ファイルシステム内のファイルがバイトオーダーマーク(BOM)で始まるため、UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence エラーが発生する場合があります。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); // ファイルの内容を文字列に読み込みます。
      $uncompressed = snappy_uncompress($str);
      echo $uncompressed;
    }

参照

詳細については、GitHub で Snappy 関連のオープンソースプロジェクトをご覧ください。詳細については、「snappy」をご参照ください。