Hi all,

There is a difference in default system property - "file.encoding". It
comes from vm[1]. I considerd it was a non-bug difference because
there isn't any description in spec. What's your opinion?

[1]
e.g. for locale zh_CN, the output
IBM VM: GB18030
DRLVM: 8859-1
RI        : GBK

3307 and 3702 are related issues.

---------- Forwarded message ----------
From: Vasily Zakharov (JIRA) <[EMAIL PROTECTED]>
Date: Apr 20, 2007 2:46 PM
Subject: [jira] Commented: (HARMONY-3702) [classlib][luni] Reader and
Writer convert characters incorrectly
To: [EMAIL PROTECTED]



  [ 
https://issues.apache.org/jira/browse/HARMONY-3702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12490241
]

Vasily Zakharov commented on HARMONY-3702:
------------------------------------------

I'm not sure if this is a non-bug difference. Probably we should have
the same default encoding as RI, for compatibility.

Probably this should be discussed in the mailing list.


[classlib][luni] Reader and Writer convert characters incorrectly
-----------------------------------------------------------------

                Key: HARMONY-3702
                URL: https://issues.apache.org/jira/browse/HARMONY-3702
            Project: Harmony
         Issue Type: Bug
         Components: Classlib
           Reporter: Vasily Zakharov
        Attachments: test.dat


java.io.Reader converts bytes to characters differently than RI does. Also, 
java.io.Writer converts characters to bytes differently than RI does.
The attached test.dat file contains random test data and must be placed to the 
current directory. ReaderTest below reads that file with FileReader and then 
dumps it to standard output by converting each character to int. WriterTest 
reads the test.dat file with FileInputStream, converts each byte to character 
by casting and then dumps the resulting characters to standard output by 
OutputStreamWriter.
public class ReaderTest {
    public static void main(String args[]) throws Exception {
        char[] buffer = new char[0x100000];
        java.io.Reader reader = new java.io.FileReader("test.dat");
        int length = reader.read(buffer, 0, buffer.length);
        for (int i = 0; i < length; i++) {
            System.out.println((int) buffer[i]);
        }
    }
}
public class WriterTest {
    public static void main(String args[]) throws Exception {
        byte[] buffer = new byte[0x100000];
        java.io.InputStream iStream = new java.io.FileInputStream("test.dat");
        int length = iStream.read(buffer, 0, buffer.length);
        char[] charBuffer = new char[length];
        for (int i = 0; i < length; i++) {
            charBuffer[i] = (char) buffer[i];
        }
        java.io.Writer writer = new java.io.OutputStreamWriter(System.out);
        writer.write(charBuffer, 0, length);
        writer.close();
    }
}
In both cases, output files on RI and on Harmony are different:
$ RI/bin/java ReaderTest > reader.ri
$ HY/bin/java ReaderTest > reader.hy
$ diff --binary -q reader.ri reader.hy
Files reader.ri and reader.hy differ
$ RI/bin/java WriterTest > writer.ri
$ HY/bin/java WriterTest > writer.hy
$ diff --binary -q writer.ri writer.hy
Files writer.ri and writer.hy differ
My investigations show that the problem is in Reader/Writer, not in 
InputStream/OutputStream. Also, I've tried other implementations of 
Reader/Writer and they share the same problem.
The problem was discovered on Windows XP/IA-32 but probably affects other 
platforms too.

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



--
Tony Wu
China Software Development Lab, IBM

Reply via email to