You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Tim Ellison (JIRA)" <ji...@apache.org> on 2006/03/30 10:58:26 UTC

[jira] Resolved: (HARMONY-182) java.nio.charset.Charset.encode(in) doesn't use the same cached encoder.

     [ http://issues.apache.org/jira/browse/HARMONY-182?page=all ]
     
Tim Ellison resolved HARMONY-182:
---------------------------------

    Resolution: Duplicate

Duplicate of HARMONY-150


> 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