From eecbcf542827192523d9575520b7abdce5d946a9 Mon Sep 17 00:00:00 2001 From: Bryce McKinlay Date: Thu, 22 Jul 2004 01:33:11 +0000 Subject: [PATCH] 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/ChangeLog | 9 ++++++++ libjava/java/net/URLConnection.java | 35 +++++++++++++++++------------ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 7b3a4863242..45bc5ca61ea 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,12 @@ +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'. + 2004-07-20 Bryce McKinlay PR libgcj/16591 diff --git a/libjava/java/net/URLConnection.java b/libjava/java/net/URLConnection.java index 867a53450c8..7b5f6a5dd18 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; } } -- 2.30.2