public static Value valueFromBytes(final ByteCodeStream bytes) throws UnsupportedEncodingException {
        Value value;
        final byte type = bytes.getCurrentByte();
        bytes.nextByte(); // consume type byte
        switch (type) {
            case NIL:
                value = Value.getNil();
                break;
            case BOOLEAN:
                if (0 == bytes.getCurrentByte()) {
                    value = Value.getFalse();
                } else {
                    value = Value.getTrue();
                }
                bytes.nextByte(); // consume value byte
                break;
            case INTEGER:
                value = Value.valueOf(ByteInteger.intFromBytes(bytes.getBytes(ByteInteger.BYTES_PER_INT)));
                break;
            case FLOAT:
                value = Value.valueOf(ByteFloat.floatFromBytes(bytes.getBytes(ByteInteger.BYTES_PER_INT)));
                break;
            case STRING:
                final byte length = bytes.getCurrentByte();
                bytes.nextByte();
                value = Value.valueOf(ByteString.stringFromBytes(bytes.getBytes(length)));
                break;
            default:
                throw new IllegalArgumentException("Unrecognized type byte: " + type + "!");
        }

        return value;
    }