--- a/jdk/src/java.base/windows/classes/sun/nio/ch/FileDispatcherImpl.java Fri Dec 05 17:36:18 2014 -0800
+++ b/jdk/src/java.base/windows/classes/sun/nio/ch/FileDispatcherImpl.java Sun Dec 07 07:10:29 2014 +0000
@@ -25,21 +25,21 @@
package sun.nio.ch;
-import java.io.*;
+import java.io.FileDescriptor;
+import java.io.IOException;
+import java.security.PrivilegedAction;
import sun.misc.SharedSecrets;
import sun.misc.JavaIOFileDescriptorAccess;
-class FileDispatcherImpl extends FileDispatcher
-{
+class FileDispatcherImpl extends FileDispatcher {
+
private static final JavaIOFileDescriptorAccess fdAccess =
SharedSecrets.getJavaIOFileDescriptorAccess();
- static {
- IOUtil.load();
- }
+ // set to true if fast file transmission (TransmitFile) is enabled
+ private static final boolean fastFileTransfer;
- FileDispatcherImpl() {
- }
+ FileDispatcherImpl() { }
@Override
boolean needsPositionLock() {
@@ -110,6 +110,36 @@
return result;
}
+ boolean canTransferToDirectly(java.nio.channels.SelectableChannel sc) {
+ return fastFileTransfer && sc.isBlocking();
+ }
+
+ boolean transferToDirectlyNeedsPositionLock() {
+ return true;
+ }
+
+ static boolean isFastFileTransferRequested() {
+ String fileTransferProp = java.security.AccessController.doPrivileged(
+ new PrivilegedAction<String>() {
+ @Override
+ public String run() {
+ return System.getProperty("jdk.net.enableFastFileTransfer");
+ }
+ });
+ boolean enable;
+ if ("".equals(fileTransferProp)) {
+ enable = true;
+ } else {
+ enable = Boolean.parseBoolean(fileTransferProp);
+ }
+ return enable;
+ }
+
+ static {
+ IOUtil.load();
+ fastFileTransfer = isFastFileTransferRequested();
+ }
+
//-- Native methods
static native int read0(FileDescriptor fd, long address, int len)