Mercurial > hg > openjdk > jigsaw > jdk
changeset 4365:5b05f8d1c0e5
4884238: Adds java.nio.charset.StandardCharset to provide static final constants for the standard charsets.
Reviewed-by: alanb, sherman, darcy
author | mduigou |
---|---|
date | Tue, 26 Apr 2011 14:25:42 -0700 |
parents | 147da2c8b749 |
children | bf2a12c1ffe3 |
files | src/share/classes/java/nio/charset/Charset.java src/share/classes/java/nio/charset/StandardCharset.java src/share/classes/java/nio/file/Path.java src/share/classes/java/util/zip/ZipCoder.java src/share/classes/java/util/zip/ZipFile.java src/share/classes/java/util/zip/ZipInputStream.java src/share/classes/java/util/zip/ZipOutputStream.java src/share/classes/sun/awt/FontDescriptor.java test/java/nio/charset/StandardCharset/Standard.java |
diffstat | 9 files changed, 175 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/nio/charset/Charset.java Tue Apr 26 10:35:06 2011 -0700 +++ b/src/share/classes/java/nio/charset/Charset.java Tue Apr 26 14:25:42 2011 -0700 @@ -143,6 +143,8 @@ * * <h4>Standard charsets</h4> * + * <a name="standard"> + * * <p> Every implementation of the Java platform is required to support the * following standard charsets. Consult the release documentation for your * implementation to see if any other charsets are supported. The behavior @@ -213,6 +215,8 @@ * determined during virtual-machine startup and typically depends upon the * locale and charset being used by the underlying operating system. </p> * + * <p>The {@link StandardCharset} class defines constants for each of the + * standard charsets. * * <h4>Terminology</h4> *
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/java/nio/charset/StandardCharset.java Tue Apr 26 14:25:42 2011 -0700 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.nio.charset; + +/** + * Constant definitions for the standard {@link Charset Charsets}. These + * charsets are guaranteed to be available on every implementation of the Java + * platform. + * + * @see <a href="Charset#standard">Standard Charsets</a> + * @since 1.7 + */ +public final class StandardCharset { + + private StandardCharset() { + throw new AssertionError("No java.nio.charset.StandardCharset instances for you!"); + } + /** + * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the + * Unicode character set + */ + public static final Charset US_ASCII = Charset.forName("US-ASCII"); + /** + * ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1 + */ + public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); + /** + * Eight-bit UCS Transformation Format + */ + public static final Charset UTF_8 = Charset.forName("UTF-8"); + /** + * Sixteen-bit UCS Transformation Format, big-endian byte order + */ + public static final Charset UTF_16BE = Charset.forName("UTF-16BE"); + /** + * Sixteen-bit UCS Transformation Format, little-endian byte order + */ + public static final Charset UTF_16LE = Charset.forName("UTF-16LE"); + /** + * Sixteen-bit UCS Transformation Format, byte order identified by an + * optional byte-order mark + */ + public static final Charset UTF_16 = Charset.forName("UTF-16"); +}
--- a/src/share/classes/java/nio/file/Path.java Tue Apr 26 10:35:06 2011 -0700 +++ b/src/share/classes/java/nio/file/Path.java Tue Apr 26 14:25:42 2011 -0700 @@ -72,7 +72,7 @@ * directory and is UTF-8 encoded. * <pre> * Path path = FileSystems.getDefault().getPath("logs", "access.log"); - * BufferReader reader = Files.newBufferedReader(path, Charset.forName("UTF-8")); + * BufferReader reader = Files.newBufferedReader(path, StandardCharset.UTF_8); * </pre> * * <a name="interop"><h4>Interoperability</h4></a>
--- a/src/share/classes/java/util/zip/ZipCoder.java Tue Apr 26 10:35:06 2011 -0700 +++ b/src/share/classes/java/util/zip/ZipCoder.java Tue Apr 26 14:25:42 2011 -0700 @@ -28,6 +28,7 @@ import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; +import java.nio.charset.StandardCharset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; @@ -87,7 +88,7 @@ if (isutf8) return getBytes(s); if (utf8 == null) - utf8 = new ZipCoder(Charset.forName("UTF-8")); + utf8 = new ZipCoder(StandardCharset.UTF_8); return utf8.getBytes(s); } @@ -96,7 +97,7 @@ if (isutf8) return toString(ba, len); if (utf8 == null) - utf8 = new ZipCoder(Charset.forName("UTF-8")); + utf8 = new ZipCoder(StandardCharset.UTF_8); return utf8.toString(ba, len); } @@ -112,7 +113,7 @@ private ZipCoder(Charset cs) { this.cs = cs; - this.isutf8 = cs.name().equals("UTF-8"); + this.isutf8 = cs.name().equals(StandardCharset.UTF_8.name()); } static ZipCoder get(Charset charset) {
--- a/src/share/classes/java/util/zip/ZipFile.java Tue Apr 26 10:35:06 2011 -0700 +++ b/src/share/classes/java/util/zip/ZipFile.java Tue Apr 26 14:25:42 2011 -0700 @@ -31,6 +31,7 @@ import java.io.EOFException; import java.io.File; import java.nio.charset.Charset; +import java.nio.charset.StandardCharset; import java.util.ArrayDeque; import java.util.Deque; import java.util.Enumeration; @@ -140,7 +141,7 @@ * @since 1.3 */ public ZipFile(File file, int mode) throws IOException { - this(file, mode, Charset.forName("UTF-8")); + this(file, mode, StandardCharset.UTF_8); } /**
--- a/src/share/classes/java/util/zip/ZipInputStream.java Tue Apr 26 10:35:06 2011 -0700 +++ b/src/share/classes/java/util/zip/ZipInputStream.java Tue Apr 26 14:25:42 2011 -0700 @@ -30,6 +30,7 @@ import java.io.EOFException; import java.io.PushbackInputStream; import java.nio.charset.Charset; +import java.nio.charset.StandardCharset; import static java.util.zip.ZipConstants64.*; /** @@ -75,7 +76,7 @@ * @param in the actual input stream */ public ZipInputStream(InputStream in) { - this(in, Charset.forName("UTF-8")); + this(in, StandardCharset.UTF_8); } /**
--- a/src/share/classes/java/util/zip/ZipOutputStream.java Tue Apr 26 10:35:06 2011 -0700 +++ b/src/share/classes/java/util/zip/ZipOutputStream.java Tue Apr 26 14:25:42 2011 -0700 @@ -28,6 +28,7 @@ import java.io.OutputStream; import java.io.IOException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharset; import java.util.Vector; import java.util.HashSet; import static java.util.zip.ZipConstants64.*; @@ -100,7 +101,7 @@ * @param out the actual output stream */ public ZipOutputStream(OutputStream out) { - this(out, Charset.forName("UTF-8")); + this(out, StandardCharset.UTF_8); } /**
--- a/src/share/classes/sun/awt/FontDescriptor.java Tue Apr 26 10:35:06 2011 -0700 +++ b/src/share/classes/sun/awt/FontDescriptor.java Tue Apr 26 14:25:42 2011 -0700 @@ -26,6 +26,7 @@ import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; +import java.nio.charset.StandardCharset; import sun.nio.cs.HistoricallyNamedCharset; public class FontDescriptor implements Cloneable { @@ -104,8 +105,8 @@ if (useUnicode && unicodeEncoder == null) { try { this.unicodeEncoder = isLE? - Charset.forName("UTF_16LE").newEncoder(): - Charset.forName("UTF_16BE").newEncoder(); + StandardCharset.UTF_16LE.newEncoder(): + StandardCharset.UTF_16BE.newEncoder(); } catch (IllegalArgumentException x) {} } return useUnicode;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/nio/charset/StandardCharset/Standard.java Tue Apr 26 14:25:42 2011 -0700 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 4884238 + * @summary Test standard charset name constants. + * @author Mike Duigou + * @run main Standard + */ + +import java.nio.charset.*; + +public class Standard { + + public static void realMain(String[] args) { + check(StandardCharset.US_ASCII instanceof Charset); + check(StandardCharset.ISO_8859_1 instanceof Charset); + check(StandardCharset.UTF_8 instanceof Charset); + check(StandardCharset.UTF_16BE instanceof Charset); + check(StandardCharset.UTF_16LE instanceof Charset); + check(StandardCharset.UTF_16 instanceof Charset); + + check("US-ASCII".equals(StandardCharset.US_ASCII.name()); + check("ISO-8859-1".equals(StandardCharset.ISO_8859_1.name()); + check("UTF-8".equals(StandardCharset.UTF_8.name()); + check("UTF-16BE".equals(StandardCharset.UTF_16BE.name()); + check("UTF-16LE".equals(StandardCharset.UTF_16LE.name()); + check("UTF-16".equals(StandardCharset.UTF_16.name()); + } + + //--------------------- Infrastructure --------------------------- + static volatile int passed = 0, failed = 0; + static void pass() { passed++; } + static void fail() { failed++; Thread.dumpStack(); } + static void fail(String msg) { System.out.println(msg); fail(); } + static void unexpected(Throwable t) { failed++; t.printStackTrace(); } + static void check(boolean cond) { if (cond) pass(); else fail(); } + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else {System.out.println(x + " not equal to " + y); fail();}} + static void equal2(Object x, Object y) {equal(x, y); equal(y, x);} + public static void main(String[] args) throws Throwable { + try { realMain(args); } catch (Throwable t) { unexpected(t); } + + System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed); + if (failed > 0) throw new Exception("Some tests failed"); + } + private static abstract class Fun {abstract void f() throws Throwable;} + private static void THROWS(Class<? extends Throwable> k, Fun... fs) { + for (Fun f : fs) + try { f.f(); fail("Expected " + k.getName() + " not thrown"); } + catch (Throwable t) { + if (k.isAssignableFrom(t.getClass())) pass(); + else unexpected(t);}} + static byte[] serializedForm(Object obj) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + new ObjectOutputStream(baos).writeObject(obj); + return baos.toByteArray(); + } catch (IOException e) { throw new Error(e); }} + static Object readObject(byte[] bytes) + throws IOException, ClassNotFoundException { + InputStream is = new ByteArrayInputStream(bytes); + return new ObjectInputStream(is).readObject();} + @SuppressWarnings("unchecked") + static <T> T serialClone(T obj) { + try { return (T) readObject(serializedForm(obj)); } + catch (Exception e) { throw new Error(e); }} + +}