RFR: 8263320: [test] Add Object Stream Formatter to work with test utility HexPrinter
Roger Riggs
rriggs at openjdk.java.net
Tue Mar 9 21:44:25 UTC 2021
On Tue, 9 Mar 2021 21:37:16 GMT, Roger Riggs <rriggs at openjdk.org> wrote:
> ObjectStreamPrinter is a Formatter plugin to the test library HexPrinter.
>
> A binary stream of serialized java objects is converted into a textual form by parsing the header, typecodes, and interpreting the stream contents. The formatter can be used standalone or with the HexPrinter to align the formatted stream with the corresponding hexadecimal bytes.
>
> StreamDump is a test utility to pass the contents of a file to the HexPrinter utility. The format of the file is guessed from the encoding and initial bytes. ASN.1 and serialized object streams are supported.
The idea is to provide a fairly literal interpretation of the stream contents with annotations to make it easy to read and understand the nesting, object handle assignments, internal references, class descriptors, and block data usage.
A Hashmap with three key/value pairs is formatted:
Map<String, String> map = new HashMap<>();
map.put("1", "One");
map.put("2", "Two");
map.put("2.2", "Two");
0000: ac ed 00 05 // ObjectStream Version: 5
0004: 73 72 00 11 6a 61 76 61 2e 75 74 69 // READ CLASSDESC #0 java.util.HashMap
0010: 6c 2e 48 61 73 68 4d 61 70 //
0019: 05 07 da c1 c3 16 60 // svid: 362498820763181265L
0020: d1 //
0021: 03 // flags: WRITE_OBJECT, SERIALIZABLE
0022: 00 02 // 2 field(s) {
0024: 46 00 0a 6c 6f 61 64 46 61 63 74 6f // F loadFactor float;
0030: 72 //
0031: 49 00 09 74 68 72 65 73 68 6f 6c 64 // I threshold int;
003d: 78 // } ENDBLOCK;
003e: 70 // Super: NULL;
003f: // OBJ #1 java.util.HashMap
003f: 3f // loadFactor:0.75
0040: 40 00 00 //
0043: 00 00 00 0c // threshold:12
0047: // CustomData:
0047: 77 08 00 00 00 10 00 00 00 // BLOCKDATA 8[ ........];
0050: 03 //
0051: 74 00 01 31 // STRING #2 "1"
0055: 74 00 03 4f 6e 65 // STRING #3 "One"
005b: 74 00 01 32 // STRING #4 "2"
005f: 74 // STRING #5 "Two"
0060: 00 03 54 77 6f //
0065: 74 00 03 32 2e 32 // STRING #6 "2.2"
006b: 71 00 7e 00 05 // REF #5 Two
0070: 78 // ENDBLOCK;
The tests include a number of other examples.
-------------
PR: https://git.openjdk.java.net/jdk/pull/2900
More information about the core-libs-dev
mailing list