Marcono1234 created IO-714:
------------------------------

             Summary: ReaderInputStream does not call CharsetEncoder.flush(...)
                 Key: IO-714
                 URL: https://issues.apache.org/jira/browse/IO-714
             Project: Commons IO
          Issue Type: Bug
    Affects Versions: 2.8.0
            Reporter: Marcono1234


As defined by the {{CharsetEncoder}} 
[documentation|https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/charset/CharsetEncoder.html]
 the _encoding operation_ consists of:
# (reset)
# encode
# flush

However, {{org.apache.commons.io.input.ReaderInputStream}} does not call 
{{flush}}. This leads to incorrect results for charsets whose {{flush}} method 
appends additional bytes.

Example:
{code}
// Charset whose CharsetEncoder.flush(...) puts bytes
Charset charset = Charset.forName("Cp930");

// \u0391: Causes CharsetEncoder.flush(...) to put additional bytes
String s = "\u0391";

byte[] expected = s.getBytes(charset);
byte[] actual;
try (InputStream in = new ReaderInputStream(new StringReader(s), charset)) {
    actual = IOUtils.toByteArray(in);
}

if (!Arrays.equals(expected, actual)) {
    throw new AssertionError("\n  Expected: " + Arrays.toString(expected) + "\n 
 Actual:   " + Arrays.toString(actual));
}
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to