/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.internal.streaming.bytes;
import org.mule.runtime.api.streaming.bytes.CursorStream;
import org.mule.runtime.core.streaming.bytes.InMemoryCursorStreamConfig;
import java.io.InputStream;
/**
* An implementation of {@link AbstractCursorStreamProvider} which yields
* cursors that only use memory for buffering
*
* @since 4.0
*/
public class InMemoryCursorStreamProvider extends AbstractCursorStreamProvider {
private final InMemoryStreamBuffer buffer;
/**
* Creates a new instance
*
* @param wrappedStream the stream to buffer from
* @param config the config of the generated buffer
* @param bufferManager the {@link ByteBufferManager} that will be used to allocate all buffers
*/
public InMemoryCursorStreamProvider(InputStream wrappedStream,
InMemoryCursorStreamConfig config,
ByteBufferManager bufferManager) {
super(wrappedStream, bufferManager);
buffer = new InMemoryStreamBuffer(wrappedStream, config, bufferManager);
}
/**
* {@inheritDoc}
*/
@Override
protected CursorStream doOpenCursor() {
return new BufferedCursorStream(buffer, this, getBufferManager());
}
/**
* {@inheritDoc}
*/
@Override
public void releaseResources() {
if (buffer != null) {
buffer.close();
}
}
}