You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Paulex Yang (JIRA)" <ji...@apache.org> on 2006/03/08 07:14:39 UTC
[jira] Commented: (HARMONY-182) java.nio.charset.Charset.encode(in)
doesn't use the same cached encoder.
[ http://issues.apache.org/jira/browse/HARMONY-182?page=comments#action_12369398 ]
Paulex Yang commented on HARMONY-182:
-------------------------------------
This issue is duplicate with JIRA 150(http://issues.apache.org/jira/browse/HARMONY-150), because Charset class uses same mechanism to cache encoder and decoder, so the patch for 150 should have fixed this problem.
> java.nio.charset.Charset.encode(in) doesn't use the same cached encoder.
> ------------------------------------------------------------------------
>
> Key: HARMONY-182
> URL: http://issues.apache.org/jira/browse/HARMONY-182
> Project: Harmony
> Type: Bug
> Reporter: Richard Liang
>
> As spec says, "An invocation of this method upon a charset cs returns the same result as the expression cs.newEncoder() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .decode(bb); except that it is potentially more efficient because it can cache encoders between successive invocations. "
> RI always uses the same cached encoder (the same reference) for the charsets with same name.
> The following test case pass on RI 5.0, but fail on Harmony.
> /*
> * test cached encoder
> */
> public void testCachedEncoder() throws Exception {
> MockCachedCharset cs1 = new MockCachedCharset("CachedCharset", null);
> MockCachedCharset cs2 = new MockCachedCharset("CachedCharset", null);
> CharBuffer in = CharBuffer.wrap("A");
> cs1.encode(in);
> in.flip();
> cs2.encode(in);
> }
> /*
> * Mock Charset for cached encoder test
> */
> static class MockCachedCharset extends Charset {
> public MockCachedCharset(String canonicalName, String[] aliases) {
> super(canonicalName, aliases);
> }
> public boolean contains(Charset charset) {
> return false;
> }
> public CharsetDecoder newDecoder() {
> return new MockCachedDecoder(this);
> }
> public CharsetEncoder newEncoder() {
> return new MockCachedEncoder(this);
> }
> }
> /*
> * Mock encoder. Only one caller is permitted.
> */
> static class MockCachedEncoder extends CharsetEncoder {
> static MockCachedEncoder caller = null;
> public MockCachedEncoder(Charset cs) {
> super(cs, 1, 10);
> }
> /*
> * Only one caller is permitted.
> */
> protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) {
> if (null == caller) {
> caller = this;
> } else {
> if (caller != this) {
> // Another instance
> fail("should use same instance");
> }
> }
> return CoderResult.UNDERFLOW;
> }
> }
> /*
> * Mock decoder.
> */
> static class MockCachedDecoder extends CharsetDecoder {
> static MockCachedEncoder caller = null;
> public MockCachedDecoder(Charset cs) {
> super(cs, 1, 10);
> }
> protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) {
> in.position(in.limit());
> return CoderResult.UNDERFLOW;
> }
> }
--
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