zstd Decompress() - > Result<Bytes, string>- 수신자
- Bytes
- 최소 인자 수
- 0
- 최대 인자 수
- 0
Declaration and parameters
링크사용 조건
기본 포함 · 미정
Import std.bytes in language mode 5.21.
The current compiler selects std/bytes.tpz for this language mode. Availability in other released editions and inclusion in each installed distribution are Pending.
수신자
Bytes
매개변수 제약
Bytes.zstdCompress accepts an int level from 1 through 22. The default is 3 and other values return Err with a string.
The level is a compression effort hint. The API does not promise a size ratio, execution time, or different bytes for every pair of levels.
A successful call returns Ok with one RFC 8878 frame requiring no external dictionary. Empty input is valid.
Bytes.zstdDecompress accepts one standard frame containing raw, RLE, or compressed blocks, with valid frame parameters and an optional content checksum.
A frame requiring an unavailable dictionary, a malformed header or block, a size or checksum mismatch, and truncation return Err with a string.
Skippable frames, additional frames, and other trailing bytes return Err. The entire input must represent one data frame.
Decompression returns all uncompressed bytes in Ok or an error without a partial output. Compressing then decompressing preserves the input bytes.
The receiver and explicit level expression evaluate once in that order. The input remains unchanged and the operation performs no I/O.
관련 규칙 · Use Zstandard frames and explicit effort levels →결과
The declared result type is Result<Bytes, string>.
효과
실패
Result and effects
링크Decode one complete Zstandard data frame. Invalid framing, unavailable dictionaries, and trailing data return Err.
Resolved contracts
링크Related entries
링크Use Zstandard frames and explicit effort levels
링크Use Zstandard frames and explicit effort levels
Bytes.zstdCompress accepts an int level from 1 through 22. The default is 3 and other values return Err with a string.
The level is a compression effort hint. The API does not promise a size ratio, execution time, or different bytes for every pair of levels.
A successful call returns Ok with one RFC 8878 frame requiring no external dictionary. Empty input is valid.
Bytes.zstdDecompress accepts one standard frame containing raw, RLE, or compressed blocks, with valid frame parameters and an optional content checksum.
A frame requiring an unavailable dictionary, a malformed header or block, a size or checksum mismatch, and truncation return Err with a string.
Skippable frames, additional frames, and other trailing bytes return Err. The entire input must represent one data frame.
Decompression returns all uncompressed bytes in Ok or an error without a partial output. Compressing then decompressing preserves the input bytes.
The receiver and explicit level expression evaluate once in that order. The input remains unchanged and the operation performs no I/O.
이유
A bounded level range keeps calls portable. A complete frame boundary and explicit dictionary failure make the returned bytes independent of hidden decoder state.
Use the default and both supported level boundaries
링크import std.ioimport std.testlet source = "hello".encodeUtf8()io.writeLine(test.assertOk(test.assertOk(source.zstdCompress()).zstdDecompress()).toHex())for level in ([1, 22]) {io.writeLine(test.assertOk(test.assertOk(source.zstdCompress(level)).zstdDecompress()).toHex())}for level in ([0, 23]) {match (source.zstdCompress(level)) {case Err(_) => io.writeLine("invalid level")case Ok(_) => io.writeLine("accepted")}}
68656c6c6f
68656c6c6f
68656c6c6f
invalid level
invalid level
기대 결과
기대 결과
실행을 마칩니다. 종료 코드 0.
68656c6c6f68656c6c6f68656c6c6finvalid levelinvalid level
Decode a valid Zstandard RLE block
링크import std.bytes { Bytes }import std.ioimport std.testlet encoded = test.assertOk(Bytes.fromHex("28b52ffd20052b000041"))match (encoded.zstdDecompress()) {case Ok(bytes) => io.writeLine(bytes.toHex())case Err(_) => io.writeLine("rejected")}
4141414141
기대 결과
기대 결과
실행을 마칩니다. 종료 코드 0.
4141414141
Decode short nonfinal Zstandard raw blocks
링크import std.bytes { Bytes }import std.ioimport std.testlet encoded = test.assertOk(Bytes.fromHex("28b52ffd20020800004109000042"))match (encoded.zstdDecompress()) {case Ok(bytes) => io.writeLine(bytes.toHex())case Err(_) => io.writeLine("rejected")}
4142
기대 결과
기대 결과
실행을 마칩니다. 종료 코드 0.
4142
Reject missing block data and trailing bytes
링크import std.bytes { Bytes }import std.ioimport std.testfor hex in (["", "28b52ffd20052900006869", "28b52ffd200001000000"]) {match (test.assertOk(Bytes.fromHex(hex)).zstdDecompress()) {case Err(_) => io.writeLine("invalid Zstandard")case Ok(_) => io.writeLine("accepted")}}
invalid Zstandard
invalid Zstandard
invalid Zstandard
기대 결과
기대 결과
실행을 마칩니다. 종료 코드 0.
invalid Zstandardinvalid Zstandardinvalid Zstandard