본문으로 건너뛰기
토파즈6.0 · 출시 전
다운로드 →

문서 검색

명세 6.0

방향키로 결과를 고르고 Enter를 눌러 여세요.

API 이름, 진단 번호, 규칙 또는 프로젝트 주제를 입력하세요.

    라이브러리 · std.bytes

    Bytes.zstdCompress

    Compresses this byte sequence using Zstandard and the supplied level.

    zstdCompress(level: int = 3) -> Result<Bytes, string>
    수신자
    Bytes
    최소 인자 수
    0
    최대 인자 수
    1

    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.

    결과

    The declared result type is Result<Bytes, string>.

    효과

    실패

    Result and effects

    링크

    Return one Zstandard frame in Ok. The level ranges from 1 through 22 and defaults to 3.

    Resolved contracts

    링크

    Related entries

    링크

    std.bytes →

    Use Zstandard frames and explicit effort levels

    링크
    규칙topaz.stdlib.contract.bytes-zstd.rule

    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

    링크
    main.tpzUse the default and both supported level boundaries플레이그라운드 열기 →
    1. import std.io
    2. import std.test
    3. let source = "hello".encodeUtf8()
    4. io.writeLine(test.assertOk(test.assertOk(source.zstdCompress()).zstdDecompress()).toHex())
    5. for level in ([1, 22]) {
    6. io.writeLine(test.assertOk(test.assertOk(source.zstdCompress(level)).zstdDecompress()).toHex())
    7. }
    8. for level in ([0, 23]) {
    9. match (source.zstdCompress(level)) {
    10. case Err(_) => io.writeLine("invalid level")
    11. case Ok(_) => io.writeLine("accepted")
    12. }
    13. }
    기대 출력종료 코드 0
    68656c6c6f
    68656c6c6f
    68656c6c6f
    invalid level
    invalid level
    
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    실행을 마칩니다. 종료 코드 0.

    기대 표준 출력
    1. 68656c6c6f
    2. 68656c6c6f
    3. 68656c6c6f
    4. invalid level
    5. invalid level

    Decode a valid Zstandard RLE block

    링크
    main.tpzDecode a valid Zstandard RLE block플레이그라운드 열기 →
    1. import std.bytes { Bytes }
    2. import std.io
    3. import std.test
    4. let encoded = test.assertOk(Bytes.fromHex("28b52ffd20052b000041"))
    5. match (encoded.zstdDecompress()) {
    6. case Ok(bytes) => io.writeLine(bytes.toHex())
    7. case Err(_) => io.writeLine("rejected")
    8. }
    기대 출력종료 코드 0
    4141414141
    
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    실행을 마칩니다. 종료 코드 0.

    기대 표준 출력
    1. 4141414141

    Decode short nonfinal Zstandard raw blocks

    링크
    main.tpzDecode short nonfinal Zstandard raw blocks플레이그라운드 열기 →
    1. import std.bytes { Bytes }
    2. import std.io
    3. import std.test
    4. let encoded = test.assertOk(Bytes.fromHex("28b52ffd20020800004109000042"))
    5. match (encoded.zstdDecompress()) {
    6. case Ok(bytes) => io.writeLine(bytes.toHex())
    7. case Err(_) => io.writeLine("rejected")
    8. }
    기대 출력종료 코드 0
    4142
    
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    실행을 마칩니다. 종료 코드 0.

    기대 표준 출력
    1. 4142

    Reject missing block data and trailing bytes

    링크
    main.tpzReject missing block data and trailing bytes플레이그라운드 열기 →
    1. import std.bytes { Bytes }
    2. import std.io
    3. import std.test
    4. for hex in (["", "28b52ffd20052900006869", "28b52ffd200001000000"]) {
    5. match (test.assertOk(Bytes.fromHex(hex)).zstdDecompress()) {
    6. case Err(_) => io.writeLine("invalid Zstandard")
    7. case Ok(_) => io.writeLine("accepted")
    8. }
    9. }
    기대 출력종료 코드 0
    invalid Zstandard
    invalid Zstandard
    invalid Zstandard
    
    $ topaz run main.tpz · 대상 제품 5.21.3
    기대 결과

    기대 결과

    실행을 마칩니다. 종료 코드 0.

    기대 표준 출력
    1. invalid Zstandard
    2. invalid Zstandard
    3. invalid Zstandard

    메뉴

    다운로드 →