[ABAP] Strings mit GZIP komprimieren / dekomprimieren

DATA: l_xml TYPE string.
DATA: l_gzip TYPE xstring.
DATA: l_ungzip TYPE string.

DATA: ti_t100 TYPE STANDARD TABLE OF t100.

* Daten abfragen
SELECT * FROM t100 INTO TABLE ti_t100 UP TO 1000 ROWS.

* interne Tabelle in XML-String wandeln
CALL TRANSFORMATION id SOURCE data_node = ti_t100 RESULT XML l_xml.

WRITE: / |string unkomprimiert: { l_xml }|.

* String mit GZIP komprimieren
cl_abap_gzip=>compress_text( EXPORTING
                               text_in = l_xml
                               compress_level = 9 " 0...9
                             IMPORTING
                               gzip_out = l_gzip ).

WRITE: / |xstring GZIP komprimiert: { l_gzip }|.

* komprimierten String mit GZIP dekomprimieren
cl_abap_gzip=>decompress_text( EXPORTING
                                 gzip_in = l_gzip
                               IMPORTING
                                 text_out = l_ungzip ).
                                 
WRITE: / |string dekomprimiert: { l_ungzip }|.

[ABAP] Binärdaten (xstring) mit GZIP komprimieren

DATA: lv_str TYPE string VALUE 'Teststring für die Kompression mit GZIP.'.
DATA: lv_xstr TYPE xstring.
DATA: lv_xstr_comp TYPE xstring.

* string (UTF-8) -> xstring (binary)
DATA(o_conv_w) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
o_conv_w->write( data = lv_str ).
lv_xstr = o_conv_w->get_buffer( ).

WRITE: / lv_xstr.

* compress
cl_abap_gzip=>compress_binary( EXPORTING
                                 raw_in   = lv_xstr
                               IMPORTING
                                 gzip_out = lv_xstr_comp ).
WRITE: / lv_xstr_comp.

* uncompress
cl_abap_gzip=>decompress_binary( EXPORTING
                                   gzip_in = lv_xstr_comp
                                 IMPORTING
                                   raw_out = lv_xstr ).

WRITE: / lv_xstr.

* xstring (binary) -> string (UTF-8)
DATA(o_conv_r) = cl_abap_conv_in_ce=>create( input = lv_xstr encoding = 'UTF-8' ).
o_conv_r->read( IMPORTING data = lv_str ).

WRITE: / lv_str.