src/share/classes/java/io/RandomAccessFile.java
Print this page
rev 5501 : imported patch io-trace
*** 25,34 ****
--- 25,35 ----
package java.io;
import java.nio.channels.FileChannel;
import sun.nio.ch.FileChannelImpl;
+ import sun.misc.IoTrace;
/**
* Instances of this class support both reading and writing to a
* random access file. A random access file behaves like a large
*** 60,69 ****
--- 61,73 ----
private FileDescriptor fd;
private FileChannel channel = null;
private boolean rw;
+ /* The path of the referenced file */
+ private final String path;
+
private Object closeLock = new Object();
private volatile boolean closed = false;
private static final int O_RDONLY = 1;
private static final int O_RDWR = 2;
*** 228,237 ****
--- 232,242 ----
if (name == null) {
throw new NullPointerException();
}
fd = new FileDescriptor();
fd.incrementAndGetUseCount();
+ this.path = name;
open(name, imode);
}
/**
* Returns the opaque file descriptor object associated with this
*** 265,275 ****
* @spec JSR-51
*/
public final FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
! channel = FileChannelImpl.open(fd, true, rw, this);
/*
* FileDescriptor could be shared by FileInputStream or
* FileOutputStream.
* Ensure that FD is GC'ed only when all the streams/channels
--- 270,280 ----
* @spec JSR-51
*/
public final FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
! channel = FileChannelImpl.open(fd, path, true, rw, this);
/*
* FileDescriptor could be shared by FileInputStream or
* FileOutputStream.
* Ensure that FD is GC'ed only when all the streams/channels
*** 313,332 ****
* @return the next byte of data, or <code>-1</code> if the end of the
* file has been reached.
* @exception IOException if an I/O error occurs. Not thrown if
* end-of-file has been reached.
*/
! public native int read() throws IOException;
/**
* Reads a sub array as a sequence of bytes.
* @param b the buffer into which the data is read.
* @param off the start offset of the data.
* @param len the number of bytes to read.
* @exception IOException If an I/O error has occurred.
*/
! private native int readBytes(byte b[], int off, int len) throws IOException;
/**
* Reads up to <code>len</code> bytes of data from this file into an
* array of bytes. This method blocks until at least one byte of input
* is available.
--- 318,359 ----
* @return the next byte of data, or <code>-1</code> if the end of the
* file has been reached.
* @exception IOException if an I/O error occurs. Not thrown if
* end-of-file has been reached.
*/
! public int read() throws IOException {
! Object traceContext = IoTrace.fileReadBegin(path);
! int b = 0;
! try {
! b = read0();
! } finally {
! IoTrace.fileReadEnd(traceContext, b == -1 ? 0 : 1);
! }
! return b;
! }
!
! private native int read0() throws IOException;
/**
* Reads a sub array as a sequence of bytes.
* @param b the buffer into which the data is read.
* @param off the start offset of the data.
* @param len the number of bytes to read.
* @exception IOException If an I/O error has occurred.
*/
! private int readBytes(byte b[], int off, int len) throws IOException {
! Object traceContext = IoTrace.fileReadBegin(path);
! int bytesRead = 0;
! try {
! bytesRead = readBytes0(b, off, len);
! } finally {
! IoTrace.fileReadEnd(traceContext, bytesRead == -1 ? 0 : bytesRead);
! }
! return bytesRead;
! }
!
! private native int readBytes0(byte b[], int off, int len) throws IOException;
/**
* Reads up to <code>len</code> bytes of data from this file into an
* array of bytes. This method blocks until at least one byte of input
* is available.
*** 461,481 ****
* the current file pointer.
*
* @param b the <code>byte</code> to be written.
* @exception IOException if an I/O error occurs.
*/
! public native void write(int b) throws IOException;
/**
* Writes a sub array as a sequence of bytes.
* @param b the data to be written
-
* @param off the start offset in the data
* @param len the number of bytes that are written
* @exception IOException If an I/O error has occurred.
*/
! private native void writeBytes(byte b[], int off, int len) throws IOException;
/**
* Writes <code>b.length</code> bytes from the specified byte array
* to this file, starting at the current file pointer.
*
--- 488,529 ----
* the current file pointer.
*
* @param b the <code>byte</code> to be written.
* @exception IOException if an I/O error occurs.
*/
! public void write(int b) throws IOException {
! Object traceContext = IoTrace.fileWriteBegin(path);
! int bytesWritten = 0;
! try {
! write0(b);
! bytesWritten = 1;
! } finally {
! IoTrace.fileWriteEnd(traceContext, bytesWritten);
! }
! }
!
! private native void write0(int b) throws IOException;
/**
* Writes a sub array as a sequence of bytes.
* @param b the data to be written
* @param off the start offset in the data
* @param len the number of bytes that are written
* @exception IOException If an I/O error has occurred.
*/
! private void writeBytes(byte b[], int off, int len) throws IOException {
! Object traceContext = IoTrace.fileWriteBegin(path);
! int bytesWritten = 0;
! try {
! writeBytes0(b, off, len);
! bytesWritten = len;
! } finally {
! IoTrace.fileWriteEnd(traceContext, bytesWritten);
! }
! }
!
! private native void writeBytes0(byte b[], int off, int len) throws IOException;
/**
* Writes <code>b.length</code> bytes from the specified byte array
* to this file, starting at the current file pointer.
*