Class: Omnizip::Algorithms::LZMA::XzEncoderAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/omnizip/algorithms/lzma/encoder.rb

Overview

Adapter for XzEncoder to match SdkEncoder interface

XzEncoder has a different interface (encode(input, output) vs encode_stream(input)). This adapter wraps XzEncoder to provide the same interface as SdkEncoder.

Instance Method Summary collapse

Constructor Details

#initialize(output, options = {}) ⇒ XzEncoderAdapter

Initialize adapter

Parameters:

  • output (IO)

    Output stream

  • options (Hash) (defaults to: {})

    Encoding options



113
114
115
116
117
118
# File 'lib/omnizip/algorithms/lzma/encoder.rb', line 113

def initialize(output, options = {})
  @output = output
  @options = options
  @xz_encoder = XzEncoder.new(options)
  @bytes_for_decode = nil
end

Instance Method Details

#bytes_for_decodeInteger

Get bytes for decode (for LZMA2 compatibility)

Returns:

  • (Integer)

    Number of bytes decoder will consume



133
134
135
# File 'lib/omnizip/algorithms/lzma/encoder.rb', line 133

def bytes_for_decode
  @bytes_for_decode || @output.string.bytesize
end

#encode_stream(input) ⇒ Array<String, Integer>

Encode stream (matches SdkEncoder interface)

Parameters:

  • input (String, IO)

    Input data to compress

Returns:

  • (Array<String, Integer>)

    Tuple of [compressed_data, decode_bytes]



124
125
126
127
128
# File 'lib/omnizip/algorithms/lzma/encoder.rb', line 124

def encode_stream(input)
  input_data = input.is_a?(String) ? input : input.read
  @bytes_for_decode = @xz_encoder.encode(input_data, @output)
  [@output.string, @bytes_for_decode]
end