IO object that prints an hexadecimal dump of all transferred data.
Especially useful for debugging binary protocols on an IO, to understand better when and how data is sent or received.
By default IO::Hexdump
won't print anything; you must specify which of #read
, #write
or both you want to print.
Example:
require "io/hexdump" socket = IO::Memory.new("abc") io = IO::Hexdump.new(socket, output: STDERR, read: true)
When data is read from io it will print something akin to the following on STDERR:
00000000 50 52 49 20 2a 20 48 54 54 50 2f 32 2e 30 0d 0a PRI * HTTP/2.0.. 00000010 0d 0a 53 4d 0d 0a 0d 0a ..SM.... 00000000 00 00 00 04 .... 00000000 00 . 00000000 00 00 00 00 ....
Sets the current position (in bytes) in this IO
.
Reads at most slice.size bytes from this IO
into slice.
Writes the contents of slice into this IO
.
IO
IO
Reference
Reference
Object
Object
Sets the current position (in bytes) in this IO
.
The IO
class raises on this method, but some subclasses, notable IO::FileDescriptor
and IO::Memory
implement it.
File.write("testfile", "hello") file = File.new("testfile") file.pos = 3 file.gets_to_end # => "lo"
Reads at most slice.size bytes from this IO
into slice. Returns the number of bytes read, which is 0 if and only if there is no more data to read (so checking for 0 is the way to detect end of file).
io = IO::Memory.new "hello" slice = Bytes.new(4) io.read(slice) # => 4 slice # => Bytes[104, 101, 108, 108] io.read(slice) # => 1 slice # => Bytes[111, 101, 108, 108] io.read(slice) # => 0
© 2012–2020 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.35.1/IO/Hexdump.html