Hello,

I am reading the code in FileInputStream.read(), I find the current API was:
Java_java_io_RandomAccessFile_read(JNIEnv *env, jobject this)
readSingle(JNIEnv *env, jobject this, jfieldID fid)

It brings a object down into native and as we know reflection costs a
lot. I am wondering if we can improve this.
I see the real pointer is stored in class FileDescriptor, a quick
solution may be:
1. add a method read() in FileDescriptor, and it delgate to a native
method read(fd), fd is the real pointer stored
2. modify readSingle(JNIEnv *env, jobject this, jfieldID fid) to
readSingle(JNIEnv *env, jobject this, jlong fd)
3. add Java_java_io_FileDescriptor_read(JNIEnv *env, jobject this, jlong
fd) in FileDescriptor_md.c, which calls readSingle

As FileDescriptor is used in Socket as well, we may add similar
approach, i.e, readSocket() etc. And this approach may be available for
write and other operations.

Any comments?

-- 
Best Regards,
Jimmy, Jing LV


Reply via email to