harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Geir Magnusson Jr <g...@pobox.com>
Subject [humor] Re: [admin] Re: relying on 'available()' (was: RE: [jira] Updated: (HARMONY-166) method read() in InputStreamReader failed to read one character)
Date Tue, 25 Apr 2006 11:15:29 GMT
very funny

Mikhail Loenko wrote:
> ops. sorry
> 
> 2006/4/25, Geir Magnusson Jr <geir@pobox.com>:
>> psst... hey, Mikhail... how about a "[classlib]" on this subject line? :)
>>
>>
>> Mikhail Loenko 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:jira@apache.org]
>>>> Sent: Monday, April 24, 2006 5:14 PM
>>>> To: harmony-commits@incubator.apache.org
>>>> 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: harmony-dev-unsubscribe@incubator.apache.org
>>> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>>>
>>>
>> ---------------------------------------------------------------------
>> Terms of use : http://incubator.apache.org/harmony/mailing.html
>> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
> 
> 

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message