当前位置: 首页>>代码示例>>Java>>正文


Java Pooled.free方法代码示例

本文整理汇总了Java中org.xnio.Pooled.free方法的典型用法代码示例。如果您正苦于以下问题:Java Pooled.free方法的具体用法?Java Pooled.free怎么用?Java Pooled.free使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在org.xnio.Pooled的用法示例。


在下文中一共展示了Pooled.free方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: createChannel

import org.xnio.Pooled; //导入方法依赖的package包/类
@Override
protected AbstractAjpClientStreamSourceChannel createChannel(FrameHeaderData frameHeaderData, Pooled<ByteBuffer> frameData) throws IOException {
    if (frameHeaderData instanceof SendHeadersResponse) {
        SendHeadersResponse h = (SendHeadersResponse) frameHeaderData;
        AjpClientResponseStreamSourceChannel sourceChannel = new AjpClientResponseStreamSourceChannel(this, h.headers, h.statusCode, h.reasonPhrase, frameData, (int) frameHeaderData.getFrameLength());
        this.source = sourceChannel;
        return sourceChannel;
    } else if (frameHeaderData instanceof RequestBodyChunk) {
        RequestBodyChunk r = (RequestBodyChunk) frameHeaderData;
        this.sink.chunkRequested(r.getLength());
        frameData.free();
        return null;
    } else {
        frameData.free();
        throw new RuntimeException("TODO: unknown frame");
    }

}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:19,代码来源:AjpClientChannel.java

示例2: handleEvent

import org.xnio.Pooled; //导入方法依赖的package包/类
@Override
public void handleEvent(final StreamSourceChannel channel) {
    Pooled<ByteBuffer> resource = bufferPool.allocate();
    ByteBuffer buffer = resource.getResource();
    try {
        int r = 0;
        do {
            r = channel.read(buffer);
            if (r == 0) {
                return;
            } else if (r == -1) {
                stringDone(string.extract());
                IoUtils.safeClose(channel);
            } else {
                buffer.flip();
                string.write(buffer);
            }
        } while (r > 0);
    } catch (IOException e) {
        error(e);
    } finally {
        resource.free();
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:25,代码来源:StringReadChannelListener.java

示例3: transferFrom

import org.xnio.Pooled; //导入方法依赖的package包/类
public long transferFrom(final FileChannel src, final long position, final long count) throws IOException {
    try {
        if (state != 0) {
            final Pooled<ByteBuffer> pooled = exchange.getConnection().getBufferPool().allocate();
            ByteBuffer buffer = pooled.getResource();
            try {
                int res = src.read(buffer);
                if (res <= 0) {
                    return res;
                }
                buffer.flip();
                return write(buffer);
            } finally {
                pooled.free();
            }
        } else {
            return next.transferFrom(src, position, count);
        }
    } catch (IOException | RuntimeException e) {
        IoUtils.safeClose(exchange.getConnection());
        throw e;
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:24,代码来源:HttpResponseConduit.java

示例4: handle

import org.xnio.Pooled; //导入方法依赖的package包/类
@Override
public void handle(final PartHandler handler, final ByteBuffer rawData) throws IOException {
    Pooled<ByteBuffer> resource = bufferPool.allocate();
    ByteBuffer buf = resource.getResource();
    try {
        do {
            buf.clear();
            try {
                decoder.decode(rawData, buf);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            buf.flip();
            handler.data(buf);
        } while (rawData.hasRemaining());
    } finally {
        resource.free();
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:20,代码来源:MultipartParser.java

示例5: SpdyPlainOpenListener

import org.xnio.Pooled; //导入方法依赖的package包/类
public SpdyPlainOpenListener(final Pool<ByteBuffer> pool, final Pool<ByteBuffer> heapBufferPool, final OptionMap undertowOptions) {
    this.undertowOptions = undertowOptions;
    this.bufferPool = pool;
    Pooled<ByteBuffer> buf = pool.allocate();
    this.bufferSize = buf.getResource().remaining();
    buf.free();
    this.heapBufferPool = heapBufferPool;
    Pooled<ByteBuffer> buff = heapBufferPool.allocate();
    try {
        if (!buff.getResource().hasArray()) {
            throw UndertowMessages.MESSAGES.mustProvideHeapBuffer();
        }
    } finally {
        buff.free();
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:17,代码来源:SpdyPlainOpenListener.java

示例6: setup

import org.xnio.Pooled; //导入方法依赖的package包/类
public void setup(final StreamSourceChannel channel) {
    Pooled<ByteBuffer> resource = bufferPool.allocate();
    ByteBuffer buffer = resource.getResource();
    try {
        int r = 0;
        do {
            r = channel.read(buffer);
            if (r == 0) {
                channel.getReadSetter().set(this);
                channel.resumeReads();
            } else if (r == -1) {
                stringDone(string.extract());
                IoUtils.safeClose(channel);
            } else {
                buffer.flip();
                string.write(buffer);
            }
        } while (r > 0);
    } catch (IOException e) {
        error(e);
    } finally {
        resource.free();
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:25,代码来源:StringReadChannelListener.java

示例7: dataReady

import org.xnio.Pooled; //导入方法依赖的package包/类
/**
 * Called when data has been read from the underlying channel.
 *
 * @param headerData The frame header data. This may be null if the data is part of a an existing frame
 * @param frameData  The frame data
 */
void dataReady(FrameHeaderData headerData, Pooled<ByteBuffer> frameData) {
    if(anyAreSet(state, STATE_STREAM_BROKEN)) {
        frameData.free();
        return;
    }
    synchronized (lock) {
        boolean newData = pendingFrameData.isEmpty();
        this.pendingFrameData.add(new FrameData(headerData, frameData));
        if (newData) {
            if (waiters > 0) {
                lock.notifyAll();
            }
        }
        waitingForFrame = false;
    }
    if (anyAreSet(state, STATE_READS_RESUMED)) {
        resumeReadsInternal(true);
    }
    if(headerData != null) {
        currentStreamSize += headerData.getFrameLength();
        if(maxStreamSize > 0 && currentStreamSize > maxStreamSize) {
            handleStreamTooLarge();
        }
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:32,代码来源:AbstractFramedStreamSourceChannel.java

示例8: write

import org.xnio.Pooled; //导入方法依赖的package包/类
@Override
public int write(final ByteBuffer src) throws IOException {
    if(toWrite >= 0 && src.remaining() > toWrite) {
        throw WebSocketMessages.MESSAGES.messageOverflow();
    }
    if(masker == null) {
        return super.write(src);
    } else {
        final Pooled<ByteBuffer> buffer = getChannel().getBufferPool().allocate();
        try {
            ByteBuffer copy = src.duplicate();
            Buffers.copy(buffer.getResource(), copy);
            buffer.getResource().flip();
            masker.beforeWrite(buffer.getResource(), 0, buffer.getResource().remaining());
            int written = super.write(buffer.getResource());
            src.position(src.position() + written);
            toWrite -= written;
            return written;
        } finally {
            buffer.free();
        }
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:24,代码来源:WebSocket07FrameSinkChannel.java

示例9: startWriting

import org.xnio.Pooled; //导入方法依赖的package包/类
void startWriting() {
    Iterator<Pooled<ByteBuffer>> iterator = allocated.iterator();
    while (iterator.hasNext()) {
        Pooled<ByteBuffer> pooledBuffer = iterator.next();
        ByteBuffer byteBuffer = pooledBuffer.getResource();
        if (!byteBuffer.hasRemaining()) {
            byteBuffer.clear();
            pooledBuffer.free();
            iterator.remove();
        } else {
            break;
        }
    }
    Pooled<ByteBuffer> lastPooledBuffer = allocated.peekLast();
    if (lastPooledBuffer != null) {
        ByteBuffer lastBuffer = lastPooledBuffer.getResource();
        if (lastBuffer.limit() < lastBuffer.capacity()) {
            currentWriteBuffer = lastBuffer.compact();
        }
    }
}
 
开发者ID:vkorenev,项目名称:xnio-redis-client,代码行数:22,代码来源:ByteBufferBundle.java

示例10: AjpOpenListener

import org.xnio.Pooled; //导入方法依赖的package包/类
public AjpOpenListener(final Pool<ByteBuffer> pool, final OptionMap undertowOptions) {
    this.undertowOptions = undertowOptions;
    this.bufferPool = pool;
    Pooled<ByteBuffer> buf = pool.allocate();
    this.bufferSize = buf.getResource().remaining();
    buf.free();
    parser = new AjpRequestParser(undertowOptions.get(URL_CHARSET, UTF_8), undertowOptions.get(DECODE_URL, true));
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:9,代码来源:AjpOpenListener.java

示例11: HttpOpenListener

import org.xnio.Pooled; //导入方法依赖的package包/类
public HttpOpenListener(final Pool<ByteBuffer> pool, final OptionMap undertowOptions) {
    this.undertowOptions = undertowOptions;
    this.bufferPool = pool;
    Pooled<ByteBuffer> buf = pool.allocate();
    this.bufferSize = buf.getResource().remaining();
    buf.free();
    parser = HttpRequestParser.instance(undertowOptions);
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:9,代码来源:HttpOpenListener.java

示例12: readBlocking

import org.xnio.Pooled; //导入方法依赖的package包/类
public void readBlocking(StreamSourceFrameChannel channel) throws IOException {
    Pooled<ByteBuffer> pooled = channel.getWebSocketChannel().getBufferPool().allocate();
    final ByteBuffer buffer = pooled.getResource();
    try {
        for (; ; ) {
            int res = channel.read(buffer);
            if (res == -1) {
                buffer.flip();
                data.write(buffer);
                this.complete = true;
                return;
            } else if (res == 0) {
                channel.awaitReadable();
            }
            checkMaxSize(channel, res);
            if (!buffer.hasRemaining()) {
                buffer.flip();
                data.write(buffer);
                buffer.compact();
                if (!bufferFullMessage) {
                    //if we are not reading the full message we return
                    return;
                }
            }
        }
    } finally {
        pooled.free();
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:30,代码来源:BufferedTextMessage.java

示例13: ungetRequestBytes

import org.xnio.Pooled; //导入方法依赖的package包/类
/**
 * Pushes back the given data. This should only be used by transfer coding handlers that have read past
 * the end of the request when handling pipelined requests
 *
 * @param unget The buffer to push back
 */
public void ungetRequestBytes(final Pooled<ByteBuffer> unget) {
    if (getExtraBytes() == null) {
        setExtraBytes(unget);
    } else {
        Pooled<ByteBuffer> eb = getExtraBytes();
        ByteBuffer buf = eb.getResource();
        final ByteBuffer ugBuffer = unget.getResource();

        if (ugBuffer.limit() - ugBuffer.remaining() > buf.remaining()) {
            //stuff the existing data after the data we are ungetting
            ugBuffer.compact();
            ugBuffer.put(buf);
            ugBuffer.flip();
            eb.free();
            setExtraBytes(unget);
        } else {
            //TODO: this is horrible, but should not happen often
            final byte[] data = new byte[ugBuffer.remaining() + buf.remaining()];
            int first = ugBuffer.remaining();
            ugBuffer.get(data, 0, ugBuffer.remaining());
            buf.get(data, first, buf.remaining());
            eb.free();
            unget.free();
            final ByteBuffer newBuffer = ByteBuffer.wrap(data);
            setExtraBytes(new ImmediatePooled<>(newBuffer));
        }
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:35,代码来源:HttpServerConnection.java

示例14: AbstractFramedChannel

import org.xnio.Pooled; //导入方法依赖的package包/类
/**
 * Create a new {@link io.undertow.server.protocol.framed.AbstractFramedChannel}
 * 8
 *
 * @param connectedStreamChannel The {@link org.xnio.channels.ConnectedStreamChannel} over which the WebSocket Frames should get send and received.
 *                               Be aware that it already must be "upgraded".
 * @param bufferPool             The {@link org.xnio.Pool} which will be used to acquire {@link java.nio.ByteBuffer}'s from.
 * @param framePriority
 */
protected AbstractFramedChannel(final StreamConnection connectedStreamChannel, Pool<ByteBuffer> bufferPool, FramePriority<C, R, S> framePriority, final Pooled<ByteBuffer> readData) {
    this.framePriority = framePriority;
    if (readData != null) {
        if(readData.getResource().hasRemaining()) {
            this.readData = new ReferenceCountedPooled<>(readData, 1);
        } else {
            readData.free();
        }
    }
    if(bufferPool == null) {
        throw UndertowMessages.MESSAGES.argumentCannotBeNull("bufferPool");
    }
    if(connectedStreamChannel == null) {
        throw UndertowMessages.MESSAGES.argumentCannotBeNull("connectedStreamChannel");
    }
    IdleTimeoutConduit idle = createIdleTimeoutChannel(connectedStreamChannel);
    connectedStreamChannel.getSourceChannel().setConduit(idle);
    connectedStreamChannel.getSinkChannel().setConduit(idle);
    this.idleTimeoutConduit = idle;
    this.channel = connectedStreamChannel;
    this.bufferPool = bufferPool;

    closeSetter = new ChannelListener.SimpleSetter<>();
    receiveSetter = new ChannelListener.SimpleSetter<>();
    channel.getSourceChannel().getReadSetter().set(null);
    channel.getSourceChannel().suspendReads();

    channel.getSourceChannel().getReadSetter().set(new FrameReadListener());
    connectedStreamChannel.getSinkChannel().getWriteSetter().set(new FrameWriteListener());
    FrameCloseListener closeListener = new FrameCloseListener();
    connectedStreamChannel.getSinkChannel().getCloseSetter().set(closeListener);
    connectedStreamChannel.getSourceChannel().getCloseSetter().set(closeListener);
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:43,代码来源:AbstractFramedChannel.java

示例15: transferTo

import org.xnio.Pooled; //导入方法依赖的package包/类
@Override
public long transferTo(long count, ByteBuffer throughBuffer, StreamSinkChannel target) throws IOException {
    Pooled<ByteBuffer>[] buffered = getAttachment(BUFFERED_REQUEST_DATA);
    if (buffered == null) {
        return super.transferTo(count, throughBuffer, target);
    }
    //make sure there is no garbage in throughBuffer
    throughBuffer.position(0);
    throughBuffer.limit(0);
    long copied = 0;
    for (int i = 0; i < buffered.length; ++i) {
        Pooled<ByteBuffer> pooled = buffered[i];
        if (pooled != null) {
            final ByteBuffer buf = pooled.getResource();
            if (buf.hasRemaining()) {
                int res = target.write(buf);

                if (!buf.hasRemaining()) {
                    pooled.free();
                    buffered[i] = null;
                }
                if (res == 0) {
                    return copied;
                } else {
                    copied += res;
                }
            } else {
                pooled.free();
                buffered[i] = null;
            }
        }
    }
    removeAttachment(BUFFERED_REQUEST_DATA);
    if (copied == 0) {
        return super.transferTo(count, throughBuffer, target);
    } else {
        return copied;
    }
}
 
开发者ID:lamsfoundation,项目名称:lams,代码行数:40,代码来源:HttpServerExchange.java


注:本文中的org.xnio.Pooled.free方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。