src/share/classes/java/io/FileOutputStream.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;
/**
* A file output stream is an output stream for writing data to a
* <code>File</code> or to a <code>FileDescriptor</code>. Whether or not
*** 56,65 ****
--- 57,71 ----
* The system dependent file descriptor.
*/
private final FileDescriptor fd;
/**
+ * The path of the referenced file (null if the stream is created with a file descriptor)
+ */
+ private final String path;
+
+ /**
* True if the file is opened for append.
*/
private final boolean append;
/**
*** 205,215 ****
if (name == null) {
throw new NullPointerException();
}
this.fd = new FileDescriptor();
this.append = append;
!
fd.incrementAndGetUseCount();
open(name, append);
}
/**
--- 211,221 ----
if (name == null) {
throw new NullPointerException();
}
this.fd = new FileDescriptor();
this.append = append;
! this.path = name;
fd.incrementAndGetUseCount();
open(name, append);
}
/**
*** 242,251 ****
--- 248,258 ----
}
if (security != null) {
security.checkWrite(fdObj);
}
this.fd = fdObj;
+ this.path = null;
this.append = false;
/*
* FileDescriptor is being shared by streams.
* Ensure that it's GC'ed only when all the streams/channels are done
*** 277,287 ****
--- 284,301 ----
*
* @param b the byte 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 {
write(b, append);
+ bytesWritten = 1;
+ } finally {
+ IoTrace.fileWriteEnd(traceContext, bytesWritten);
+ }
}
/**
* Writes a sub array as a sequence of bytes.
* @param b the data to be written
*** 300,310 ****
--- 314,331 ----
*
* @param b the data.
* @exception IOException if an I/O error occurs.
*/
public void write(byte b[]) throws IOException {
+ Object traceContext = IoTrace.fileWriteBegin(path);
+ int bytesWritten = 0;
+ try {
writeBytes(b, 0, b.length, append);
+ bytesWritten = b.length;
+ } finally {
+ IoTrace.fileWriteEnd(traceContext, bytesWritten);
+ }
}
/**
* Writes <code>len</code> bytes from the specified byte array
* starting at offset <code>off</code> to this file output stream.
*** 313,323 ****
--- 334,351 ----
* @param off the start offset in the data.
* @param len the number of bytes to write.
* @exception IOException if an I/O error occurs.
*/
public void write(byte b[], int off, int len) throws IOException {
+ Object traceContext = IoTrace.fileWriteBegin(path);
+ int bytesWritten = 0;
+ try {
writeBytes(b, off, len, append);
+ bytesWritten = len;
+ } finally {
+ IoTrace.fileWriteEnd(traceContext, bytesWritten);
+ }
}
/**
* Closes this file output stream and releases any system resources
* associated with this stream. This file output stream may no longer
*** 396,406 ****
* @spec JSR-51
*/
public FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
! channel = FileChannelImpl.open(fd, false, true, append, this);
/*
* Increment fd's use count. Invoking the channel's close()
* method will result in decrementing the use count set for
* the channel.
--- 424,434 ----
* @spec JSR-51
*/
public FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
! channel = FileChannelImpl.open(fd, path, false, true, append, this);
/*
* Increment fd's use count. Invoking the channel's close()
* method will result in decrementing the use count set for
* the channel.