// Path: protocol/src/main/java/db/postgresql/protocol/v3/ProtocolException.java
// public class ProtocolException extends RuntimeException {
// 
//     public ProtocolException() {
//         super();
//     }
// 
//     public ProtocolException(String message) {
//         super(message);
//     }
// 
//     public ProtocolException(Throwable cause) {
//         super(cause);
//     }
// 
//     public ProtocolException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public static void from(IOException ioe) {
//         throw new ProtocolException(ioe);
//     }
// }


import db.postgresql.protocol.v3.ProtocolException;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import java.nio.charset.CharacterCodingException;
    
    public byte[] get(byte[] dst) {
        return get(dst, 0, dst.length);
    }
    
    public byte[] get(byte[] dst, int tries) {
        return get(dst);
    }

    public String nullString() {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream(256);
            byte b;
            while((b = get()) != NULL) {
                baos.write(b);
            }
            
            return baos.toString(encoding.name());
        }
        catch(UnsupportedEncodingException ex) {
            throw new ProtocolException(ex);
        }
    }

    public String nullString(final int size) {
        byte[] bytes = get(new byte[size]);
        int length = (bytes[bytes.length - 1] == (byte) 0) ? bytes.length - 1 : bytes.length;
        return new String(bytes, 0, length, encoding);
    }

// Path: protocol/src/main/java/db/postgresql/protocol/v3/ProtocolException.java
// public class ProtocolException extends RuntimeException {
// 
//     public ProtocolException() {
//         super();
//     }
// 
//     public ProtocolException(String message) {
//         super(message);
//     }
// 
//     public ProtocolException(Throwable cause) {
//         super(cause);
//     }
// 
//     public ProtocolException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public static void from(IOException ioe) {
//         throw new ProtocolException(ioe);
//     }
// }


// Path: protocol/src/main/java/db/postgresql/protocol/v3/io/FixedStream.java
import db.postgresql.protocol.v3.ProtocolException;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import java.nio.charset.CharacterCodingException;

    
    public byte[] get(byte[] dst) {
        return get(dst, 0, dst.length);
    }
    
    public byte[] get(byte[] dst, int tries) {
        return get(dst);
    }

    public String nullString() {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream(256);
            byte b;
            while((b = get()) != NULL) {
                baos.write(b);
            }
            
            return baos.toString(encoding.name());
        }
        catch(UnsupportedEncodingException ex) {
            throw new ProtocolException(ex);
        }
    }

    public String nullString(final int size) {
        byte[] bytes = get(new byte[size]);
        int length = (bytes[bytes.length - 1] == (byte) 0) ? bytes.length - 1 : bytes.length;
        return new String(bytes, 0, length, encoding);
    }

    public String nullString(final int size, final int tries) {