Added a getContentLength() method to URLConnection

This is particularly important if you want to get the number of bytes of a
resource loaded by the class loader:
  getClass().getResource("myFile").openConnection().getContentLength()
This commit is contained in:
Eric Scharff 2008-07-15 09:36:52 -06:00
parent a2ba391b89
commit 13a535d1c6
3 changed files with 30 additions and 0 deletions

View File

@ -100,6 +100,10 @@ public final class URL {
super(url);
}
public int getContentLength() {
return ResourceInputStream.getContentLength(url.getFile());
}
public InputStream getInputStream() throws IOException {
return new ResourceInputStream(url.getFile());
}
@ -116,6 +120,8 @@ public final class URL {
}
}
private static native int getContentLength(String path);
private static native long open(String path) throws IOException;
private static native int read(long peer, int position) throws IOException;

View File

@ -25,6 +25,10 @@ public abstract class URLConnection {
return getInputStream();
}
public int getContentLength() {
return -1;
}
public InputStream getInputStream() throws IOException {
throw new UnknownServiceException();
}

View File

@ -741,6 +741,26 @@ Java_java_lang_Thread_enumerate(Thread* t, jclass, jobjectArray array)
return count;
}
extern "C" JNIEXPORT jint JNICALL
Java_java_net_URL_00024ResourceInputStream_getContentLength
(Thread* t, jclass, jstring path)
{
ENTER(t, Thread::ActiveState);
if (LIKELY(path)) {
char p[stringLength(t, *path) + 1];
stringChars(t, *path, p);
System::Region* r = t->m->finder->find(p);
if (r) {
jint rSize = r->length();
r->dispose();
return rSize;
}
}
return -1;
}
extern "C" JNIEXPORT jlong JNICALL
Java_java_net_URL_00024ResourceInputStream_open
(Thread* t, jclass, jstring path)