FileDocCategorySizeDatePackage
SocketOutputStream.javaAPI DocJava SE 5 API4537Fri Aug 26 14:57:08 BST 2005java.net

SocketOutputStream

public class SocketOutputStream extends FileOutputStream
This stream extends FileOutputStream to implement a SocketOutputStream. Note that this class should NOT be public.
version
1.30, 12/19/03
author
Jonathan Payne
author
Arthur van Hoff

Fields Summary
private PlainSocketImpl
impl
private byte[]
temp
private Socket
socket
private boolean
closing
Closes the stream.
Constructors Summary
SocketOutputStream(PlainSocketImpl impl)
Creates a new SocketOutputStream. Can only be called by a Socket. This method needs to hang on to the owner Socket so that the fd will not be closed.

param
impl the socket output stream inplemented

    
                                             
        
	super(impl.getFileDescriptor());
	this.impl = impl;
	socket = impl.getSocket();
    
Methods Summary
public voidclose()

         
	// Prevent recursion. See BugId 4484411
	if (closing)
	    return;
	closing = true;
	if (socket != null) {
	    if (!socket.isClosed())
		socket.close();
	} else
	    impl.close();
	closing = false;
    
protected voidfinalize()
Overrides finalize, the fd is closed by the Socket.

public final java.nio.channels.FileChannelgetChannel()
Returns the unique {@link java.nio.channels.FileChannel FileChannel} object associated with this file output stream.

The getChannel method of SocketOutputStream returns null since it is a socket based stream.

return
the file channel associated with this file output stream
since
1.4
spec
JSR-51

        return null;
    
private static native voidinit()
Perform class load-time initializations.

private voidsocketWrite(byte[] b, int off, int len)
Writes to the socket with appropriate locking of the FileDescriptor.

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.


	if (len <= 0 || off < 0 || off + len > b.length) {
	    if (len == 0) {
		return;
	    }
	    throw new ArrayIndexOutOfBoundsException();
	}

	FileDescriptor fd = impl.acquireFD();
	try {
	    socketWrite0(fd, b, off, len);
	} catch (SocketException se) {
	    if (se instanceof sun.net.ConnectionResetException) {
		impl.setConnectionResetPending();
		se = new SocketException("Connection reset");
	    }
	    if (impl.isClosedOrPending()) {
                throw new SocketException("Socket closed");
            } else {
		throw se;
	    }
	} finally {
	    impl.releaseFD();
	}
    
private native voidsocketWrite0(java.io.FileDescriptor fd, byte[] b, int off, int len)
Writes to the socket.

param
fd the FileDescriptor
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.

public voidwrite(int b)
Writes a byte to the socket.

param
b the data to be written
exception
IOException If an I/O error has occurred.

	temp[0] = (byte)b;
	socketWrite(temp, 0, 1);
    
public voidwrite(byte[] b)
Writes the contents of the buffer b to the socket.

param
b the data to be written
exception
SocketException If an I/O error has occurred.

	socketWrite(b, 0, b.length);
    
public voidwrite(byte[] b, int off, int len)
Writes length bytes from buffer b starting at offset len.

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
SocketException If an I/O error has occurred.

	socketWrite(b, off, len);