public const int BinaryMagicHeader = 0x564B4256; // VBKV

        public KV1BinaryReader(Stream stream, IVisitationListener listener)
        {
            Require.NotNull(stream, nameof(stream));
            Require.NotNull(listener, nameof(listener));

            if (!stream.CanSeek)
            {
                throw new ArgumentException("Stream must be seekable", nameof(stream));
            }

            this.stream   = stream;
            this.listener = listener;
            reader        = new BinaryReader(stream, Encoding.UTF8, leaveOpen: true);
        }
        public Kv1BinaryReader(Stream stream, IVisitationListener listener, KvSerializerOptions options)
        {
            Require.NotNull(stream, nameof(stream));
            Require.NotNull(listener, nameof(listener));

            _isVbkv = options.HasVbkvHeader;
            if (_isVbkv)
            {
                _terminator = Kv1BinaryNodeType.EndVbkv;
            }

            if (!stream.CanSeek)
            {
                throw new ArgumentException("Stream must be seekable", nameof(stream));
            }

            _stream   = stream;
            _listener = listener;
            _reader   = new BinaryReader(stream, Encoding.UTF8, true);
        }
        public KVObjectVisitor(IVisitationListener listener)
        {
            Require.NotNull(listener, nameof(listener));

            this.listener = listener;
        }