From 421fc583bedb3bb0ef421a4b752ff200cc3e296a Mon Sep 17 00:00:00 2001
From: Pavel Rappo This class defines static methods that support the interoperation of the
- * stream classes of the {@link java.io} package with the channel
- * classes of this package.
The read methods of the resulting stream will throw an + *
The {@code read} methods of the resulting stream will throw an * {@link IllegalBlockingModeException} if invoked while the underlying * channel is in non-blocking mode. The stream will not be buffered, and * it will not support the {@link InputStream#mark mark} or {@link @@ -121,14 +117,14 @@ public final class Channels { * @return A new input stream */ public static InputStream newInputStream(ReadableByteChannel ch) { - checkNotNull(ch, "ch"); - return new sun.nio.ch.ChannelInputStream(ch); + Objects.requireNonNull(ch, "ch"); + return new ChannelInputStream(ch); } /** * Constructs a stream that writes bytes to the given channel. * - *
The write methods of the resulting stream will throw an + *
The {@code write} methods of the resulting stream will throw an * {@link IllegalBlockingModeException} if invoked while the underlying * channel is in non-blocking mode. The stream will not be buffered. The * stream will be safe for access by multiple concurrent threads. Closing @@ -139,46 +135,49 @@ public final class Channels { * * @return A new output stream */ - public static OutputStream newOutputStream(final WritableByteChannel ch) { - checkNotNull(ch, "ch"); + public static OutputStream newOutputStream(WritableByteChannel ch) { + Objects.requireNonNull(ch, "ch"); return new OutputStream() { - private ByteBuffer bb = null; - private byte[] bs = null; // Invoker's previous array - private byte[] b1 = null; + private ByteBuffer bb; + private byte[] bs; // Invoker's previous array + private byte[] b1; - public synchronized void write(int b) throws IOException { - if (b1 == null) - b1 = new byte[1]; - b1[0] = (byte)b; - this.write(b1); - } + @Override + public synchronized void write(int b) throws IOException { + if (b1 == null) + b1 = new byte[1]; + b1[0] = (byte) b; + this.write(b1); + } - public synchronized void write(byte[] bs, int off, int len) + @Override + public synchronized void write(byte[] bs, int off, int len) throws IOException - { - if ((off < 0) || (off > bs.length) || (len < 0) || - ((off + len) > bs.length) || ((off + len) < 0)) { - throw new IndexOutOfBoundsException(); - } else if (len == 0) { - return; - } - ByteBuffer bb = ((this.bs == bs) - ? this.bb - : ByteBuffer.wrap(bs)); - bb.limit(Math.min(off + len, bb.capacity())); - bb.position(off); - this.bb = bb; - this.bs = bs; - Channels.writeFully(ch, bb); + { + if ((off < 0) || (off > bs.length) || (len < 0) || + ((off + len) > bs.length) || ((off + len) < 0)) { + throw new IndexOutOfBoundsException(); + } else if (len == 0) { + return; } + ByteBuffer bb = ((this.bs == bs) + ? this.bb + : ByteBuffer.wrap(bs)); + bb.limit(Math.min(off + len, bb.capacity())); + bb.position(off); + this.bb = bb; + this.bs = bs; + Channels.writeFully(ch, bb); + } - public void close() throws IOException { - ch.close(); - } + @Override + public void close() throws IOException { + ch.close(); + } - }; + }; } /** @@ -196,13 +195,13 @@ public final class Channels { * * @since 1.7 */ - public static InputStream newInputStream(final AsynchronousByteChannel ch) { - checkNotNull(ch, "ch"); + public static InputStream newInputStream(AsynchronousByteChannel ch) { + Objects.requireNonNull(ch, "ch"); return new InputStream() { - private ByteBuffer bb = null; - private byte[] bs = null; // Invoker's previous array - private byte[] b1 = null; + private ByteBuffer bb; + private byte[] bs; // Invoker's previous array + private byte[] b1; @Override public synchronized int read() throws IOException { @@ -216,13 +215,14 @@ public final class Channels { @Override public synchronized int read(byte[] bs, int off, int len) - throws IOException + throws IOException { if ((off < 0) || (off > bs.length) || (len < 0) || ((off + len) > bs.length) || ((off + len) < 0)) { throw new IndexOutOfBoundsException(); - } else if (len == 0) + } else if (len == 0) { return 0; + } ByteBuffer bb = ((this.bs == bs) ? this.bb @@ -270,25 +270,25 @@ public final class Channels { * * @since 1.7 */ - public static OutputStream newOutputStream(final AsynchronousByteChannel ch) { - checkNotNull(ch, "ch"); + public static OutputStream newOutputStream(AsynchronousByteChannel ch) { + Objects.requireNonNull(ch, "ch"); return new OutputStream() { - private ByteBuffer bb = null; - private byte[] bs = null; // Invoker's previous array - private byte[] b1 = null; + private ByteBuffer bb; + private byte[] bs; // Invoker's previous array + private byte[] b1; @Override public synchronized void write(int b) throws IOException { - if (b1 == null) + if (b1 == null) b1 = new byte[1]; - b1[0] = (byte)b; + b1[0] = (byte) b; this.write(b1); } @Override public synchronized void write(byte[] bs, int off, int len) - throws IOException + throws IOException { if ((off < 0) || (off > bs.length) || (len < 0) || ((off + len) > bs.length) || ((off + len) < 0)) { @@ -343,12 +343,11 @@ public final class Channels { * * @return A new readable byte channel */ - public static ReadableByteChannel newChannel(final InputStream in) { - checkNotNull(in, "in"); + public static ReadableByteChannel newChannel(InputStream in) { + Objects.requireNonNull(in, "in"); - if (in instanceof FileInputStream && - FileInputStream.class.equals(in.getClass())) { - return ((FileInputStream)in).getChannel(); + if (in.getClass() == FileInputStream.class) { + return ((FileInputStream) in).getChannel(); } return new ReadableByteChannelImpl(in); @@ -358,16 +357,16 @@ public final class Channels { extends AbstractInterruptibleChannel // Not really interruptible implements ReadableByteChannel { - InputStream in; + private final InputStream in; private static final int TRANSFER_SIZE = 8192; - private byte buf[] = new byte[0]; - private boolean open = true; - private Object readLock = new Object(); + private byte[] buf = new byte[0]; + private final Object readLock = new Object(); ReadableByteChannelImpl(InputStream in) { this.in = in; } + @Override public int read(ByteBuffer dst) throws IOException { int len = dst.remaining(); int totalRead = 0; @@ -399,9 +398,9 @@ public final class Channels { } } + @Override protected void implCloseChannel() throws IOException { in.close(); - open = false; } } @@ -418,12 +417,11 @@ public final class Channels { * * @return A new writable byte channel */ - public static WritableByteChannel newChannel(final OutputStream out) { - checkNotNull(out, "out"); + public static WritableByteChannel newChannel(OutputStream out) { + Objects.requireNonNull(out, "out"); - if (out instanceof FileOutputStream && - FileOutputStream.class.equals(out.getClass())) { - return ((FileOutputStream)out).getChannel(); + if (out.getClass() == FileOutputStream.class) { + return ((FileOutputStream) out).getChannel(); } return new WritableByteChannelImpl(out); @@ -433,16 +431,16 @@ public final class Channels { extends AbstractInterruptibleChannel // Not really interruptible implements WritableByteChannel { - OutputStream out; + private final OutputStream out; private static final int TRANSFER_SIZE = 8192; - private byte buf[] = new byte[0]; - private boolean open = true; - private Object writeLock = new Object(); + private byte[] buf = new byte[0]; + private final Object writeLock = new Object(); WritableByteChannelImpl(OutputStream out) { this.out = out; } + @Override public int write(ByteBuffer src) throws IOException { int len = src.remaining(); int totalWritten = 0; @@ -465,9 +463,9 @@ public final class Channels { } } + @Override protected void implCloseChannel() throws IOException { out.close(); - open = false; } } @@ -479,7 +477,7 @@ public final class Channels { * given decoder. * *
The resulting stream will contain an internal input buffer of at - * least minBufferCap bytes. The stream's read methods + * least {@code minBufferCap} bytes. The stream's {@code read} methods * will, as needed, fill the buffer by reading bytes from the underlying * channel; if the channel is in non-blocking mode when bytes are to be * read then an {@link IllegalBlockingModeException} will be thrown. The @@ -495,7 +493,7 @@ public final class Channels { * * @param minBufferCap * The minimum capacity of the internal byte buffer, - * or -1 if an implementation-dependent + * or {@code -1} if an implementation-dependent * default capacity is to be used * * @return A new reader @@ -504,7 +502,7 @@ public final class Channels { CharsetDecoder dec, int minBufferCap) { - checkNotNull(ch, "ch"); + Objects.requireNonNull(ch, "ch"); return StreamDecoder.forDecoder(ch, dec.reset(), minBufferCap); } @@ -514,16 +512,15 @@ public final class Channels { * *
An invocation of this method of the form * - *
+ *- * Channels.newReader(ch, csname)
{@code
+ * Channels.newReader(ch, csname)
+ * }
*
* behaves in exactly the same way as the expression
*
- * + *- * Channels.newReader(ch, - * Charset.forName(csName) - * .newDecoder(), - * -1);
{@code
+ * Channels.newReader(ch, Charset.forName(csName).newDecoder(), -1)
+ * }
*
* @param ch
* The channel from which bytes will be read
@@ -540,7 +537,7 @@ public final class Channels {
public static Reader newReader(ReadableByteChannel ch,
String csName)
{
- checkNotNull(csName, "csName");
+ Objects.requireNonNull(csName, "csName");
return newReader(ch, Charset.forName(csName).newDecoder(), -1);
}
@@ -549,7 +546,7 @@ public final class Channels {
* writes the resulting bytes to the given channel.
*
* The resulting stream will contain an internal output buffer of at - * least minBufferCap bytes. The stream's write methods + * least {@code minBufferCap} bytes. The stream's {@code write} methods * will, as needed, flush the buffer by writing bytes to the underlying * channel; if the channel is in non-blocking mode when bytes are to be * written then an {@link IllegalBlockingModeException} will be thrown. @@ -564,16 +561,16 @@ public final class Channels { * * @param minBufferCap * The minimum capacity of the internal byte buffer, - * or -1 if an implementation-dependent + * or {@code -1} if an implementation-dependent * default capacity is to be used * * @return A new writer */ - public static Writer newWriter(final WritableByteChannel ch, - final CharsetEncoder enc, - final int minBufferCap) + public static Writer newWriter(WritableByteChannel ch, + CharsetEncoder enc, + int minBufferCap) { - checkNotNull(ch, "ch"); + Objects.requireNonNull(ch, "ch"); return StreamEncoder.forEncoder(ch, enc.reset(), minBufferCap); } @@ -582,17 +579,15 @@ public final class Channels { * charset and writes the resulting bytes to the given channel. * *
An invocation of this method of the form - * - *
- * + *- * Channels.newWriter(ch, csname)
+ *
{@code
+ * Channels.newWriter(ch, csname)
+ * }
* behaves in exactly the same way as the expression
- *
- * + *- * Channels.newWriter(ch, - * Charset.forName(csName) - * .newEncoder(), - * -1);
+ *
{@code
+ * Channels.newWriter(ch, Charset.forName(csName).newEncoder(), -1)
+ * }
*
* @param ch
* The channel to which bytes will be written
@@ -609,7 +604,7 @@ public final class Channels {
public static Writer newWriter(WritableByteChannel ch,
String csName)
{
- checkNotNull(csName, "csName");
+ Objects.requireNonNull(csName, "csName");
return newWriter(ch, Charset.forName(csName).newEncoder(), -1);
}
}