[kaffe] Re: Characters and Bytes conversion

Ito Kazumitsu kaz@maczuka.gcd.org
Tue Jan 13 06:57:04 2004


--Multipart_Tue_Jan_13_23:55:50_2004-1
Content-Type: text/plain; charset=US-ASCII

>>>>> ":" == Ito Kazumitsu <kaz@maczuka.gcd.org> writes:

:> (1) For an encoding name XXX that can be a Java class name,
:>     CharToByteXXX or ByteToCharXXX is tried first and if
:>     there is no such class, then iconv is tried.
:> 
:>     Isn't it better to have a way to directly call iconv
:>     without trying CharToByteXXX or ByteToCharXXX?

Current CharToByteConverter and ByteToCharConverter do so.

:> (2) We are merging GNU Classpath's classes into kaffe.  If
:>     kaffe's java.io.InputStreamReader and the like are to
:>     be replaced by GNU Classpath's, a good characters and
:>     bytes conversion mechanism must be implemented in GNU
:>     Classpath.

I experimentally imported GNU Classpath's java.io.InputStreamReader
and java.io.OutputStreamWriter and the result was successful.

This is what I did.

1. Copy the following files from GNU Classpath and use them as they are.

   gnu/java/io/encode/Encoder.java
   gnu/java/io/decode/Decoder.java

2. Copy the following file from GNU Classpath and modify it for
   use with kaffe.

   gnu/java/io/EncodingManager.java

3. Copy the following files from GNU Classpath and change the
   package name from "java.io" to "javatest.io".

   java/io/InputStreamReader.java
   java/io/OutputStreamWriter.java

4. Make the following new files.

   gnu/java/io/encode/KaffeEncoder.java
   gnu/java/io/decode/KaffeDecoder.java

5. Make a test program.

   TestKaffeEncoding.java

Attached are these files.


--Multipart_Tue_Jan_13_23:55:50_2004-1
Content-Type: application/octet-stream; type=tar+gzip
Content-Disposition: attachment; filename="TestKaffeEncoding.tar.gz"
Content-Transfer-Encoding: base64

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
/64ntFUAGAEA

--Multipart_Tue_Jan_13_23:55:50_2004-1--