PHPで作成したlz4をgolangで読み込む
そのまま読み込むとエラーとなる
PHPで作成したlz4
をgolangで読み込もうとすると下記のエラーが出る。
lz4: invalid source or destination buffer too short
PHPで作成したlz4
の最初の4バイトは元のデータサイズが格納されているため、エラーが出るらしい。
下記に仕様が記載されている。
Compress Data
4バイト以降を渡すと展開してくれる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package main
import (
"encoding/base64"
"encoding/binary"
"fmt"
"net/http"
"github.com/pierrec/lz4"
)
/*
DAAAAMBIZWxsbyBXb3JsZCE=はPHPの下記コードで出力したもの
echo base64_encode(lz4_compress('Hello World!'));
*/
func main() {
bytes, err := base64.StdEncoding.DecodeString("DAAAAMBIZWxsbyBXb3JsZCE=")
if err != nil {
panic(err)
}
//最初の4バイトは元のサイズ
size := binary.LittleEndian.Uint32(bytes)
//元のサイズで領域を確保しておく
out := make([]byte, size)
//4バイト以降を取得
lz4data := bytes[4:]
n, err := lz4.UncompressBlock(lz4data, out)
if err != nil {
panic(err)
}
//データ部分を取り出す
data := out[:n]
fmt.Println(size, string(data))
}
|
結果は下記となる。
実行環境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
~/$ go version
go version go1.16.5 linux/amd64
~/$ php -v
PHP 8.0.1 (cli) (built: Jan 29 2021 01:29:13) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.1, Copyright (c) Zend Technologies
with Zend OPcache v8.0.1, Copyright (c), by Zend Technologies
~/$ php --ri lz4
lz4
LZ4 support => enabled
Extension Version => 0.4.3
LZ4 headers Version => 1.9.2
LZ4 library Version => 1.9.2
|