< prev index next >

src/java.base/share/classes/sun/nio/ch/IOUtil.java

Print this page

        

*** 27,36 **** --- 27,41 ---- import java.io.FileDescriptor; import java.io.IOException; import java.nio.ByteBuffer; + import jdk.internal.misc.JavaIOFileDescriptorAccess; + import jdk.internal.misc.JavaNioAccess; + import jdk.internal.misc.SharedSecrets; + import jdk.internal.ref.Cleaner; + import sun.security.action.GetPropertyAction; /** * File-descriptor based I/O utilities that are shared by NIO classes. */
*** 39,48 **** --- 44,56 ---- /** * Max number of iovec structures that readv/writev supports */ static final int IOV_MAX; + private static final JavaIOFileDescriptorAccess fdAccess = + SharedSecrets.getJavaIOFileDescriptorAccess(); + private IOUtil() { } // No instantiation static int write(FileDescriptor fd, ByteBuffer src, long position, NativeDispatcher nd) throws IOException
*** 84,97 **** --- 92,113 ---- int written = 0; if (rem == 0) return 0; if (position != -1) { + if (fdAccess.getDirect(fd)) + written = nd.pwriteDirect(fd, + ((DirectBuffer)bb).address() + pos, + rem, position); + else written = nd.pwrite(fd, ((DirectBuffer)bb).address() + pos, rem, position); } else { + if (fdAccess.getDirect(fd)) + written = nd.writeDirect(fd, ((DirectBuffer)bb).address() + pos, rem); + else written = nd.write(fd, ((DirectBuffer)bb).address() + pos, rem); } if (written > 0) bb.position(pos + written); return written;
*** 143,153 **** i++; } if (iov_len == 0) return 0L; ! long bytesWritten = nd.writev(fd, vec.address, iov_len); // Notify the buffers how many bytes were taken long left = bytesWritten; for (int j=0; j<iov_len; j++) { if (left > 0) { --- 159,173 ---- i++; } if (iov_len == 0) return 0L; ! long bytesWritten; ! if (fdAccess.getDirect(fd)) ! bytesWritten = nd.writevDirect(fd, vec.address, iov_len); ! else ! bytesWritten = nd.writev(fd, vec.address, iov_len); // Notify the buffers how many bytes were taken long left = bytesWritten; for (int j=0; j<iov_len; j++) { if (left > 0) {
*** 215,227 **** --- 235,254 ---- if (rem == 0) return 0; int n = 0; if (position != -1) { + if (fdAccess.getDirect(fd)) + n = nd.preadDirect(fd, ((DirectBuffer)bb).address() + pos, + rem, position); + else n = nd.pread(fd, ((DirectBuffer)bb).address() + pos, rem, position); } else { + if (fdAccess.getDirect(fd)) + n = nd.readDirect(fd, ((DirectBuffer)bb).address() + pos, rem); + else n = nd.read(fd, ((DirectBuffer)bb).address() + pos, rem); } if (n > 0) bb.position(pos + n); return n;
*** 272,283 **** } i++; } if (iov_len == 0) return 0L; ! ! long bytesRead = nd.readv(fd, vec.address, iov_len); // Notify the buffers how many bytes were read long left = bytesRead; for (int j=0; j<iov_len; j++) { ByteBuffer shadow = vec.getShadow(j); --- 299,313 ---- } i++; } if (iov_len == 0) return 0L; ! long bytesRead; ! if (fdAccess.getDirect(fd)) ! bytesRead = nd.readvDirect(fd, vec.address, iov_len); ! else ! bytesRead = nd.readv(fd, vec.address, iov_len); // Notify the buffers how many bytes were read long left = bytesRead; for (int j=0; j<iov_len; j++) { ByteBuffer shadow = vec.getShadow(j);
< prev index next >