diff options
author | Michael Koch <konqueror@gmx.de> | 2003-02-18 07:26:20 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2003-02-18 07:26:20 +0000 |
commit | 69c107efe49360359ac10ab2172fafaf0a665deb (patch) | |
tree | 9d984f276c26345880ee577e8d68261a6c8ee2d3 /libjava/java | |
parent | c7adfa01929ceb5978fa6cfe768eec7a9b75a24b (diff) | |
download | gcc-69c107efe49360359ac10ab2172fafaf0a665deb.zip gcc-69c107efe49360359ac10ab2172fafaf0a665deb.tar.gz gcc-69c107efe49360359ac10ab2172fafaf0a665deb.tar.bz2 |
2003-02-18 Michael Koch <konqueror@gmx.de>
* java/nio/channels/FileChannel.java
(toString): New implementation, added documentation.
(map): Added exception documentation.
(size): Added exception documentation.
(write): New methods, documentation work.
(read): New methods, documentation work.
(implCloseChannel): Rewrote exception documentation.
(force): Throws IOException, added documentation.
(lock): New methods.
(tryLock): New methods.
(position): New methods.
(transferTo): New method.
(transferFrom): New method.
(truncate): New method.
* java/nio/channels/spi/SelectorProvider.java
(provider): Implemented.
* Makefile.am
(ordinary_java_source_files): Added the following files:
gnu/java/nio/DatagramChannelImpl.java
gnu/java/nio/FileChannelImpl.java
gnu/java/nio/PipeImpl.java
gnu/java/nio/SelectionKeyImpl.java
gnu/java/nio/SelectorImpl.java
gnu/java/nio/SelectorProviderImpl.java
gnu/java/nio/ServerSocketChannelImpl.java
gnu/java/nio/SocketChannelImpl.java
java/nio/channels/FileLock.java
(nat_java_source_files): Added the following files:
gnu/java/nio/natFileChannelImpl.cc
gnu/java/nio/natSelectorImpl.cc
gnu/java/nio/natSocketChannelImpl.cc
* Makefile.in: Regenerated.
From-SVN: r63028
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/nio/channels/FileChannel.java | 243 | ||||
-rw-r--r-- | libjava/java/nio/channels/spi/SelectorProvider.java | 8 |
2 files changed, 243 insertions, 8 deletions
diff --git a/libjava/java/nio/channels/FileChannel.java b/libjava/java/nio/channels/FileChannel.java index 8970b98..3fa0f35 100644 --- a/libjava/java/nio/channels/FileChannel.java +++ b/libjava/java/nio/channels/FileChannel.java @@ -65,9 +65,17 @@ public abstract class FileChannel extends AbstractInterruptibleChannel m = a; } + /** + * Returns a string representation of the <code>MapMode</code> object. + */ public String toString() { - return "" + m; + if (this == READ_ONLY) + return "READ_ONLY"; + else if (this == READ_WRITE) + return "READ_WRITE"; + + return "PRIVATE"; } } @@ -81,20 +89,28 @@ public abstract class FileChannel extends AbstractInterruptibleChannel /** * Maps the file into the memory. * - * @exception IOException If an error occurs. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If mode is READ_ONLY but this channel was + * not opened for reading. + * @exception NonWritableChannelException If mode is READ_WRITE or PRIVATE but this + * channel was not opened for writing. */ public abstract MappedByteBuffer map(MapMode mode, long position, long size) throws IOException; /** * Return the size of the file thus far + * + * @exception ClosedChannelException If this channel is closed. */ public abstract long size() throws IOException; /** * Writes data to the channel. * - * @exception IOException If an error occurs. + * @exception IOException If an I/O error occurs. */ public long write (ByteBuffer[] srcs) throws IOException { @@ -110,26 +126,243 @@ public abstract class FileChannel extends AbstractInterruptibleChannel /** * Writes data to the channel. + * + * @exception IOException If an I/O error occurs. + */ + public abstract int write (ByteBuffer src) throws IOException; + + /** + * Writes data to the channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If position is negative. + * @exception IOException If an I/O error occurs. + * @exception NonWritableChannelException If this channel was not opened for + * writing. + */ + public abstract int write (ByteBuffer srcs, long position) throws IOException; + + /** + * Writes data to the channel. + * + * @exception IOException If an I/O error occurs. */ public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException; /** * Reads data from the channel. + * + * @exception IOException If an I/O error occurs. + */ + public abstract long read (ByteBuffer[] dsts, int offset, int length) + throws IOException; + + /** + * Reads data from the channel. + * + * @exception IOException If an I/O error occurs. + */ + public final long read (ByteBuffer[] dsts) throws IOException + { + long result = 0; + + for (int i = 0; i < dsts.length; i++) + { + read (dsts [i]); + } + + return result; + } + + /** + * Reads data from the channel. + * + * @exception IOException If an I/O error occurs. */ public abstract int read(ByteBuffer dst) throws IOException; /** + * Reads data from the channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If position is negative. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If this channel was not opened for + * reading. + */ + public abstract int read(ByteBuffer dst, long position) throws IOException; + + /** * Closes the channel. * * This is called from @see close. * - * @exception IOException If an error occurs. + * @exception IOException If an I/O error occurs. */ protected abstract void implCloseChannel() throws IOException; /** * msync with the disk + * + * @exception ClosedChannelException If this channel is closed. + * @exception IOException If an I/O error occurs. + */ + public abstract void force(boolean metaData) throws IOException; + + /** + * Creates a file lock for the whole assoziated file. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedChannelException If this channel is closed. + * @exception FileLockInterruptionException If the invoking thread is + * interrupted while blocked in this method. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If shared is true and this channel + * was not opened for reading. + * @exception NonWritableChannelException If shared is false and this channel + * was not opened for writing. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + */ + public final FileLock lock () throws IOException + { + return lock (0, Long.MAX_VALUE, false); + } + + /** + * Creates a file lock for a region of the assoziated file. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedChannelException If this channel is closed. + * @exception FileLockInterruptionException If the invoking thread is + * interrupted while blocked in this method. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + * @exception NonReadableChannelException If shared is true and this channel + * was not opened for reading. + * @exception NonWritableChannelException If shared is false and this channel + * was not opened for writing. + */ + public abstract FileLock lock (long position, long size, boolean shared) + throws IOException; + + /** + * Tries to aqquire alock on the whole assoziated file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IOException If an I/O error occurs. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + */ + public final FileLock tryLock () throws IOException + { + return tryLock (0, Long.MAX_VALUE, false); + } + + /** + * Tries to aqquire a lock on a region of the assoziated file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception OverlappingFileLockException If a lock that overlaps the + * requested region is already held by this Java virtual machine, or if + * another thread is already blocked in this method and is attempting to lock + * an overlapping region. + */ + public abstract FileLock tryLock (long position, long size, boolean shared) + throws IOException; + + /** + * Returns the current position on the file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IOException If an I/O error occurs. + */ + public abstract long position () throws IOException; + + /** + * Sets the position of the channel on the assoziated file. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If newPosition is negative. + * @exception IOException If an I/O error occurs. + */ + public abstract FileChannel position (long newPosition) throws IOException; + + /** + * Transfers bytes from this channel's file to the given writable byte + * channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If this channel was not opened for + * reading. + * @exception NonWritableChannelException If the target channel was not + * opened for writing. + */ + public abstract long transferTo (long position, long count, + WritableByteChannel target) + throws IOException; + + /** + * Transfers bytes from the given readable channel into this channel. + * + * @exception AsynchronousCloseException If another thread closes this channel + * while the transfer is in progress. + * @exception ClosedByInterruptException If another thread interrupts the + * current thread while the transfer is in progress, thereby closing both + * channels and setting the current thread's interrupt status. + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If the preconditions on the parameters + * do not hold. + * @exception IOException If an I/O error occurs. + * @exception NonReadableChannelException If the source channel was not + * opened for reading. + * @exception NonWritableChannelException If this channel was not opened for + * writing. + */ + public abstract long transferFrom (ReadableByteChannel src, long position, + long count) throws IOException; + + /** + * Truncates the channel's file at <code>size</code>. + * + * @exception ClosedChannelException If this channel is closed. + * @exception IllegalArgumentException If size is negative. + * @exception IOException If an I/O error occurs. + * @exception NonWritableChannelException If this channel was not opened for + * writing. */ - public abstract void force(boolean metaData); + public abstract FileChannel truncate (long size) throws IOException; } diff --git a/libjava/java/nio/channels/spi/SelectorProvider.java b/libjava/java/nio/channels/spi/SelectorProvider.java index 157a341..1d4ccfa 100644 --- a/libjava/java/nio/channels/spi/SelectorProvider.java +++ b/libjava/java/nio/channels/spi/SelectorProvider.java @@ -37,7 +37,7 @@ exception statement from your version. */ package java.nio.channels.spi; -/* import gnu.java.nio.channels.SelectorProviderImpl; */ +import gnu.java.nio.SelectorProviderImpl; import java.io.IOException; import java.nio.channels.DatagramChannel; import java.nio.channels.Pipe; @@ -97,8 +97,10 @@ public abstract class SelectorProvider */ public static SelectorProvider provider () { -/* if (pr == null) */ -/* pr = new SelectorProviderImpl (); */ + if (pr == null) + { + pr = new SelectorProviderImpl (); + } return pr; } |