diff options
author | Bryce McKinlay <mckinlay@redhat.com> | 2004-07-22 01:33:11 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2004-07-22 02:33:11 +0100 |
commit | eecbcf542827192523d9575520b7abdce5d946a9 (patch) | |
tree | 1a0a199fd7f987eaa9b486b3e315675dc3166189 /libjava/java | |
parent | c9092111fd29bb8e26c7dedb96a854d45c442977 (diff) | |
download | gcc-eecbcf542827192523d9575520b7abdce5d946a9.zip gcc-eecbcf542827192523d9575520b7abdce5d946a9.tar.gz gcc-eecbcf542827192523d9575520b7abdce5d946a9.tar.bz2 |
URLConnection.java (position): New field.
2004-07-21 Bryce McKinlay <mckinlay@redhat.com>
* java/net/URLConnection.java (position): New field.
(dateFormat1, dateFormat2, dateFormat3): Removed.
(dateFormats): New field.
(getHeaderFieldDate): Use new dateFormats array. Re-use
parsePosition each time instead of re-allocating.
(initializeDateFormats): Initialize 'dateFormats'.
From-SVN: r85033
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/net/URLConnection.java | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/libjava/java/net/URLConnection.java b/libjava/java/net/URLConnection.java index 867a534..7b5f6a5 100644 --- a/libjava/java/net/URLConnection.java +++ b/libjava/java/net/URLConnection.java @@ -165,11 +165,12 @@ public abstract class URLConnection protected URL url; private static Hashtable handlers = new Hashtable(); - private static SimpleDateFormat dateFormat1; - private static SimpleDateFormat dateFormat2; - private static SimpleDateFormat dateFormat3; + private static SimpleDateFormat[] dateFormats; private static boolean dateformats_initialized; + /* Cached ParsePosition, used when parsing dates. */ + private ParsePosition position; + /** * Creates a URL connection to a given URL. A real connection is not made. * Use #connect to do this. @@ -366,19 +367,24 @@ public abstract class URLConnection { if (! dateformats_initialized) initializeDateFormats(); + + if (position == null) + position = new ParsePosition(0); long result = defaultValue; String str = getHeaderField(name); if (str != null) { - Date date; - if ((date = dateFormat1.parse(str, new ParsePosition(0))) != null) - result = date.getTime(); - else if ((date = dateFormat2.parse(str, new ParsePosition(0))) != null) - result = date.getTime(); - else if ((date = dateFormat3.parse(str, new ParsePosition(0))) != null) - result = date.getTime(); + for (int i = 0; i < dateFormats.length; i++) + { + SimpleDateFormat df = dateFormats[i]; + position.setIndex(0); + position.setErrorIndex(0); + Date date = df.parse(str, position); + if (date != null) + return date.getTime(); + } } return result; @@ -1040,17 +1046,18 @@ public abstract class URLConnection // We don't put these in a static initializer, because it creates problems // with initializer co-dependency: SimpleDateFormat's constructors eventually // depend on URLConnection (via the java.text.*Symbols classes). - private synchronized void initializeDateFormats() + private static synchronized void initializeDateFormats() { if (dateformats_initialized) return; Locale locale = new Locale("En", "Us", "Unix"); - dateFormat1 = + dateFormats = new SimpleDateFormat[3]; + dateFormats[0] = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss 'GMT'", locale); - dateFormat2 = + dateFormats[1] = new SimpleDateFormat("EEEE, dd-MMM-yy hh:mm:ss 'GMT'", locale); - dateFormat3 = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale); + dateFormats[2] = new SimpleDateFormat("EEE MMM d hh:mm:ss yyyy", locale); dateformats_initialized = true; } } |