Reading bytes between two quotes from a stream and decoding it to its appropriate character set
the only advice, that I can give you, is to separate the logic in multiple methods. This will make your method shorter and allow the code to be reused.

Personally, I see two other methods.

    String readString(Reader r, Charset charset) throws IOException {
        ByteArrayOutputStream ostream = copyInputToStream(r);

        final ByteBuffer byteBuffer = ByteBuffer.wrap(ostream.toByteArray());

        return decodeBufferAsString(charset, byteBuffer);
    }

    private String decodeBufferAsString(Charset charset, ByteBuffer byteBuffer) throws CharacterCodingException {
        return charset.newDecoder().decode(byteBuffer).toString();
    }

    private ByteArrayOutputStream copyInputToStream(Reader reader) throws IOException {
        ByteArrayOutputStream ostream = new ByteArrayOutputStream();

        int cp;

        while ((cp = reader.read()) &gt; 0) {

            if (cp == '"') {
                break;
            }

            ostream.write(cp);
        }

        return ostream;
    }