src/share/classes/java/io/RandomAccessFile.java

Print this page
rev 6052 : [mq]: jdk.patch

*** 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
*** 59,68 **** --- 60,70 ---- public class RandomAccessFile implements DataOutput, DataInput, Closeable { private FileDescriptor fd; private FileChannel channel = null; private boolean rw; + private final String path; private Object closeLock = new Object(); private volatile boolean closed = false; private static final int O_RDONLY = 1;
*** 228,237 **** --- 230,240 ---- if (name == null) { throw new NullPointerException(); } fd = new FileDescriptor(); fd.attach(this); + this.path = name; open(name, imode); } /** * Returns the opaque file descriptor object associated with this
*** 267,277 **** * @spec JSR-51 */ public final FileChannel getChannel() { synchronized (this) { if (channel == null) { ! channel = FileChannelImpl.open(fd, true, rw, this); } return channel; } } --- 270,280 ---- * @spec JSR-51 */ public final FileChannel getChannel() { synchronized (this) { if (channel == null) { ! channel = FileChannelImpl.open(fd, path, true, rw, this); } return channel; } }
*** 304,323 **** * @return the next byte of data, or {@code -1} 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} bytes of data from this file into an * array of bytes. This method blocks until at least one byte of input * is available. --- 307,340 ---- * @return the next byte of data, or {@code -1} 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 traceHandle = IoTrace.fileReadBegin(path); ! int v = read0(); ! IoTrace.fileReadEnd(traceHandle, v == -1 ? -1 : 1); ! return v; ! } ! ! 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 traceHandle = IoTrace.fileReadBegin(path); ! int v = readBytes0(b, off, len); ! IoTrace.fileReadEnd(traceHandle, v); ! return v; ! } ! ! private native int readBytes0(byte b[], int off, int len) throws IOException; /** * Reads up to {@code len} bytes of data from this file into an * array of bytes. This method blocks until at least one byte of input * is available.
*** 452,472 **** * the current file pointer. * * @param b the {@code byte} 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} bytes from the specified byte array * to this file, starting at the current file pointer. * --- 469,500 ---- * the current file pointer. * * @param b the {@code byte} to be written. * @exception IOException if an I/O error occurs. */ ! public void write(int b) throws IOException { ! Object traceHandle = IoTrace.fileWriteBegin(path); ! write0(b); ! IoTrace.fileWriteEnd(traceHandle, 1); ! } ! ! 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 traceHandle = IoTrace.fileWriteBegin(path); ! writeBytes0(b, off, len); ! IoTrace.fileWriteEnd(traceHandle, len); ! } ! ! private native void writeBytes0(byte b[], int off, int len) throws IOException; /** * Writes {@code b.length} bytes from the specified byte array * to this file, starting at the current file pointer. *