HCC2DF コンテナ形式
HCC2DF は API 呼び出し時に既定で使われるバイナリコンテナ形式です(structured: false を渡すと使用しません)。元のペイロードにファイル名と必要に応じて zlib 圧縮を付与します。
バイナリレイアウト
複数バイトのフィールドはすべてビッグエンディアンです。コンテナはパディングのない連続したバイト列です。
| オフセット | サイズ(バイト) | 項目 | 説明 |
|---|---|---|---|
| 0 | 6 | magic | ASCII 文字列 HCC2DF。常に存在し、デコーダが形式を判別するために使います。 |
| 6 | 1 | version | 形式バージョン。現在は常に 0x01 です。 |
| 7 | 1 | compression | 圧縮フラグ。0x00 = 非圧縮、0x01 = zlib-deflate 圧縮。 |
| 8 | 1 | nameLen | 後続する UTF-8 ファイル名のバイト長。有効範囲は 1〜127。 |
| 9 | nameLen | name | UTF-8 のファイル名。パス区切り文字や null バイトは不可。 |
| 9 + nameLen | 残り | content | ペイロード本体。compression == 0x01 の場合は inflate / zlib.decompress で展開します。 |
圧縮ルール
エンコーダは各ペイロードに対して zlib 圧縮を試みます。圧縮後が元サイズの 90% 未満になる場合にのみ圧縮を採用します。
ファイル名の制約
- UTF-8 で 1〜127 バイト。
- パス区切り文字(/ または \)を含めない。
- null バイト(0x00)を含めない。
これらは形式レベルの制約であり、API は不正な inputName をエンコーダへ渡す前に正規化します。
例 — 16 進ダンプ
ASCII 文字列 Hello を note.txt として格納した、非圧縮コンテナの例です。
48 43 43 32 44 46 — magic "HCC2DF" 01 — version 1 00 — uncompressed 08 — filename length: 8 bytes 6e 6f 74 65 2e 74 78 74 — "note.txt" 48 65 6c 6c 6f — content: "Hello"