From eecbcf542827192523d9575520b7abdce5d946a9 Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Thu, 22 Jul 2004 01:33:11 +0000 Subject: URLConnection.java (position): New field. 2004-07-21 Bryce McKinlay * 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 --- libjava/java/net/URLConnection.java | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'libjava/java/net/URLConnection.java') 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; } } -- cgit v1.1