Mikhail,

OK, I'll prepare new patch. I've found other 2 issues that can affect
InputStreamReader and I'll submit it soon.

Thanks.
Vladimir.

On 4/25/06, Mikhail Loenko <[EMAIL PROTECTED]> wrote:
> Vladimir,
>
> >Method available() is still used to determine endOfInput parameter.
> According to >specification the
> >method should be overridden by subclasses.
>
> 'should' does not mean 'must' , moreover it might be a user class who
> does not care what the spec says. There could be cases when you do not
> know how many bytes are available and you have to return 0.
>
> So I think the patch should be modified to avoid 'available()'
>
> Thanks,
> Mikhail
>
> >-----Original Message-----
> >From: Vladimir Strigun (JIRA) [mailto:[EMAIL PROTECTED]
> >Sent: Monday, April 24, 2006 5:14 PM
> >To: [EMAIL PROTECTED]
> >Subject: [jira] Updated: (HARMONY-166) method read() in
> InputStreamReader failed to read one
> >character
> >
> >     [ http://issues.apache.org/jira/browse/HARMONY-166?page=all ]
> >
> >Vladimir Strigun updated HARMONY-166:
> >-------------------------------------
> >
> >    Attachment: InputStreamReader.java.patch
> >
> >Mikhail,
> >
> >please review my patch.  Now method read() is not modified. I just
> add decoding operations to
> >fillBuf() method.
> >Method available() is still used to determine endOfInput parameter.
> According to specification the
> >method should be overridden by subclasses.
> >
> >> method read() in InputStreamReader failed to read one character
> >> ---------------------------------------------------------------
> >>
> >>          Key: HARMONY-166
> >>          URL: http://issues.apache.org/jira/browse/HARMONY-166
> >>      Project: Harmony
> >>         Type: Bug
> >
> >>   Components: Classlib
> >>     Reporter: Vladimir Strigun
> >>  Attachments: InputStreamReader.java.patch, InputStreamReader.patch.txt,
> >InputStreamReaderTest.java
> >>
> >> I've started to play with harmony-57 contribution and found bug in
> InputStreamReader class.
> >Method read() should read a single character from input stream but it
> works incorrectly for 2
> >bytes-per-char charsets. Example below shows that it failed to read
> one character in UTF-16
> >charset. Sorry for so ugly test, it's just a part of
> InputStreamReaderTest from Harmony-57
> >contribution.
> >> import java.io.*;
> >> import junit.framework.TestCase;
> >> public class InputStreamReaderTest extends TestCase {
> >> public static void main(String[] args) {
> >> junit.textui.TestRunner.run(InputStreamReaderTest.class);
> >> }
> >> public void test_ISR_read() throws Exception {
> >> InputStream in;
> >> InputStreamReader reader;
> >> try {
> >> in = new LimitedByteArrayInputStream(0);
> >> reader = new InputStreamReader(in, "UTF-16BE");
> >> int xx = reader.read();
> >> assertTrue("Incorrect byte UTF-16BE", xx == '\u6172');
> >> } catch (UnsupportedEncodingException e) {
> >> // Can't test without the converter
> >> System.out.println(e);
> >> } catch (IOException e) {
> >> e.printStackTrace();
> >> fail("UTF-16BE unexpected 1: " + e);
> >> }
> >> try {
> >> in = new LimitedByteArrayInputStream(0);
> >> reader = new InputStreamReader(in, "UTF-16LE");
> >> int xx = reader.read();
> >> assertTrue("Incorrect byte UTF-16BE", xx == '\u7261');
> >> } catch (UnsupportedEncodingException e) {
> >> // Can't test without the converter
> >> } catch (IOException e) {
> >> fail("UTF-16BE unexpected 2: " + e);
> >> }
> >> try {
> >> in = new LimitedByteArrayInputStream(1);
> >> reader = new InputStreamReader(in, "UTF-16");
> >> assertTrue("Incorrect byte UTF-16BE", reader.read() == '\u7261');
> >> } catch (UnsupportedEncodingException e) {
> >> // Can't test without the converter
> >> } catch (IOException e) {
> >> fail("UTF-16BE unexpected 3: " + e);
> >> }
> >> try {
> >> in = new LimitedByteArrayInputStream(2);
> >> reader = new InputStreamReader(in, "ISO2022JP");
> >> int ch = reader.read();
> >> assertTrue("Incorrect byte ISO2022JP 1: " + ch, ch == '\u4e5d');
> >> ch = reader.read();
> >> assertTrue("Incorrect byte ISO2022JP 2: " + ch, ch == '\u7b2c');
> >> } catch (UnsupportedEncodingException e) {
> >> // Can't test without the converter
> >> System.out.println(e);
> >> } catch (IOException e) {
> >> fail("ISO2022JP unexpected: " + e);
> >> }
> >> }
> >> static class LimitedByteArrayInputStream extends ByteArrayInputStream {
> >> // A ByteArrayInputStream that only returns a single byte per read
> >> byte[] bytes;
> >> int count;
> >> public LimitedByteArrayInputStream(int type) {
> >> super(new byte[0]);
> >> switch (type) {
> >> case 0:
> >> bytes = new byte[] { 0x61, 0x72 };
> >> break;
> >> case 1:
> >> bytes = new byte[] { (byte) 0xff, (byte) 0xfe, 0x61, 0x72 };
> >> break;
> >> case 2:
> >> bytes = new byte[] { '\u001b', '$', 'B', '6', 'e', 'B', 'h',
> >> '\u001b', '(', 'B' };
> >> break;
> >> }
> >> count = bytes.length;
> >> }
> >> public int read() {
> >> if (count == 0)
> >> return -1;
> >> count--;
> >> return bytes[bytes.length - count];
> >> }
> >> public int read(byte[] buffer, int offset, int length) {
> >> if (count == 0)
> >> return -1;
> >> if (length == 0)
> >> return 0;
> >> buffer[offset] = bytes[bytes.length - count];
> >> count--;
> >> return 1;
> >> }
> >> public int available() {
> >> return count;
> >> }
> >> }
> >> }
> >
> >--
> >This message is automatically generated by JIRA.
> >-
> >If you think it was sent incorrectly contact one of the administrators:
> >   http://issues.apache.org/jira/secure/Administrators.jspa
> >-
> >For more information on JIRA, see:
> >   http://www.atlassian.com/software/jira
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to