diff -ru CVS/classpath/java/nio/charset/CharsetDecoder.java updated/classpath/java/nio/charset/CharsetDecoder.java
--- CVS/classpath/java/nio/charset/CharsetDecoder.java	2010-06-19 16:15:38.000000000 +0400
+++ updated/classpath/java/nio/charset/CharsetDecoder.java	2010-06-19 16:17:12.000000000 +0400
@@ -1,5 +1,5 @@
 /* CharsetDecoder.java --
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2010  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -132,10 +132,11 @@
     reset();
     out.flip ();
 
-    // Unfortunately, resizing the actual charbuffer array is required.
-    char[] resized = new char[out.remaining()];
+    // Resizing the actual charbuffer array is not required.
+    /* char[] resized = new char[out.remaining()];
     out.get(resized);
-    return CharBuffer.wrap(resized);
+    return CharBuffer.wrap(resized); */
+    return out;
   }
 
   public final CoderResult decode (ByteBuffer in, CharBuffer out,
diff -ru CVS/classpath/java/nio/charset/CharsetEncoder.java updated/classpath/java/nio/charset/CharsetEncoder.java
--- CVS/classpath/java/nio/charset/CharsetEncoder.java	2010-06-19 16:15:48.000000000 +0400
+++ updated/classpath/java/nio/charset/CharsetEncoder.java	2010-06-19 16:17:14.000000000 +0400
@@ -1,5 +1,5 @@
 /* CharsetEncoder.java --
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2010  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -184,7 +184,10 @@
 
     out.flip ();
 
-    // Unfortunately, resizing the actual bytebuffer array is required.
+    // Resizing the actual bytebuffer array is not required.
+    if (out.remaining() >= n - (n >> 2))
+      return out;
+
     byte[] resized = new byte[out.remaining()];
     out.get(resized);
     return ByteBuffer.wrap(resized);
