org.glassfish.grizzly.web
Class SocketChannelOutputBuffer

java.lang.Object
  extended by org.glassfish.grizzly.web.container.http11.InternalOutputBuffer
      extended by org.glassfish.grizzly.web.SocketChannelOutputBuffer
All Implemented Interfaces:
FileOutputBuffer, OutputBuffer, ByteChunk.ByteOutputChannel
Direct Known Subclasses:
AsynchronousOutputBuffer

public class SocketChannelOutputBuffer
extends InternalOutputBuffer
implements FileOutputBuffer

Output buffer. Buffer the bytes until the ByteChunk is full or the request is completed.

Author:
Jean-Francois Arcand, Scott Oaks, Alexey Stashok

Nested Class Summary
 
Nested classes/interfaces inherited from class org.glassfish.grizzly.web.container.http11.InternalOutputBuffer
InternalOutputBuffer.OutputStreamOutputBuffer
 
Field Summary
protected static Buffer ACK
          ACK static bytes.
protected  StreamWriter connectionStreamWriter
          StreamWriter, which will be used to write data.
protected static Logger logger
           
protected static int MAX_BUFFERED_BYTES
          Maximum cached bytes before flushing.
protected static int maxBufferedBytes
          Default max cached bytes.
protected  Buffer outputBuffer
          Underlying Buffer
 
Fields inherited from class org.glassfish.grizzly.web.container.http11.InternalOutputBuffer
activeFilters, buf, committed, filterLibrary, finished, headers, lastActiveFilter, outputStream, outputStreamOutputBuffer, pos, response, socketBuffer, useSocketBuffer
 
Constructor Summary
SocketChannelOutputBuffer(Response response, int headerBufferSize, boolean useSocketBuffer)
          Alternate constructor.
 
Method Summary
protected  Buffer createBuffer(int size)
          Create the output Buffer
 void endRequest()
          End request.
 void flush()
          Flush the buffered bytes,
 void flushBuffer()
          Writes bytes to the underlying channel.
 void flushChannel(Buffer bb)
          Flush the buffer by looping until the ByteBuffer is empty
 StreamWriter getStreamWriter()
          Return the underlying StreamWriter.
 boolean isAsyncHttpWriteEnabled()
          Is async HTTP write enabled.
 boolean isSupportFileSend()
          Returns true, if OutputBuffer supports file-send mode, or false otherwise.
 void realWriteBytes(byte[] cbuf, int off, int len)
          Callback to write data from the buffer.
 void recycle()
          Recycle the output buffer.
 void reset()
          Reset current response.
 void sendAck()
          Send an acknoledgement without buffering.
 long sendFile(FileChannel fileChannel, long position, long length)
          Transfers data from file channel to the socket channel directly.
 void setAsyncHttpWriteEnabled(boolean isAsyncHttpWriteEnabled)
          Set if async HTTP write enabled.
 void setStreamWriter(StreamWriter streamWriter)
          Set the underlying StreamWriter.
 
Methods inherited from class org.glassfish.grizzly.web.container.http11.InternalOutputBuffer
addActiveFilter, addFilter, addLastOutputFilter, clearFilters, commit, doWrite, endHeaders, getFilters, getOutputStream, nextRequest, sendHeader, sendHeader, sendHeader, sendStatus, setOutputStream, setSocketBuffer, write, write, write, write, write, write
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected static Logger logger

connectionStreamWriter

protected StreamWriter connectionStreamWriter
StreamWriter, which will be used to write data.


outputBuffer

protected Buffer outputBuffer
Underlying Buffer


ACK

protected static final Buffer ACK
ACK static bytes.


MAX_BUFFERED_BYTES

protected static final int MAX_BUFFERED_BYTES
Maximum cached bytes before flushing.

See Also:
Constant Field Values

maxBufferedBytes

protected static int maxBufferedBytes
Default max cached bytes.

Constructor Detail

SocketChannelOutputBuffer

public SocketChannelOutputBuffer(Response response,
                                 int headerBufferSize,
                                 boolean useSocketBuffer)
Alternate constructor.

Method Detail

createBuffer

protected Buffer createBuffer(int size)
Create the output Buffer


setStreamWriter

public void setStreamWriter(StreamWriter streamWriter)
Set the underlying StreamWriter.


getStreamWriter

public StreamWriter getStreamWriter()
Return the underlying StreamWriter.


isAsyncHttpWriteEnabled

public boolean isAsyncHttpWriteEnabled()
Is async HTTP write enabled.

Returns:
true, if async HTTP write enabled, or false otherwise.

setAsyncHttpWriteEnabled

public void setAsyncHttpWriteEnabled(boolean isAsyncHttpWriteEnabled)
Set if async HTTP write enabled.

Parameters:
isAsyncHttpWriteEnabled - true, if async HTTP write enabled, or false otherwise.

sendAck

public void sendAck()
             throws IOException
Send an acknoledgement without buffering.

Overrides:
sendAck in class InternalOutputBuffer
Throws:
IOException

realWriteBytes

public void realWriteBytes(byte[] cbuf,
                           int off,
                           int len)
                    throws IOException
Callback to write data from the buffer.

Specified by:
realWriteBytes in interface ByteChunk.ByteOutputChannel
Overrides:
realWriteBytes in class InternalOutputBuffer
Throws:
IOException

flushChannel

public void flushChannel(Buffer bb)
                  throws IOException
Flush the buffer by looping until the ByteBuffer is empty

Parameters:
bb - the ByteBuffer to write.
Throws:
IOException

isSupportFileSend

public boolean isSupportFileSend()
Returns true, if OutputBuffer supports file-send mode, or false otherwise.

Specified by:
isSupportFileSend in interface FileOutputBuffer
Returns:
true, if OutputBuffer supports file-send mode, or false otherwise.

sendFile

public long sendFile(FileChannel fileChannel,
                     long position,
                     long length)
              throws IOException
Transfers data from file channel to the socket channel directly.

Specified by:
sendFile in interface FileOutputBuffer
Parameters:
fileChannel - FileChannel
position - The position within the file at which the transfer is to begin; must be non-negative
length - The maximum number of bytes to be transferred; must be non-negative
Returns:
number of bytes tranferred
Throws:
IOException

flush

public void flush()
           throws IOException
Flush the buffered bytes,

Overrides:
flush in class InternalOutputBuffer
Throws:
IOException - an undelying I/O error occured

endRequest

public void endRequest()
                throws IOException
End request.

Overrides:
endRequest in class InternalOutputBuffer
Throws:
IOException - an undelying I/O error occured

flushBuffer

public void flushBuffer()
                 throws IOException
Writes bytes to the underlying channel.

Throws:
IOException

recycle

public void recycle()
Recycle the output buffer. This should be called when closing the connection.

Overrides:
recycle in class InternalOutputBuffer

reset

public void reset()
Reset current response.

Overrides:
reset in class InternalOutputBuffer
Throws:
IllegalStateException - if the response has already been committed


Copyright © 2009 SUN Microsystems. All Rights Reserved.