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)