aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorBryce McKinlay <mckinlay@redhat.com>2004-07-22 01:33:11 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2004-07-22 02:33:11 +0100
commiteecbcf542827192523d9575520b7abdce5d946a9 (patch)
tree1a0a199fd7f987eaa9b486b3e315675dc3166189 /libjava/java
parentc9092111fd29bb8e26c7dedb96a854d45c442977 (diff)
downloadgcc-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.java35
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;
}
}