InMemoryChannelFactory.java
package emissary.core.channels;
import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
import org.apache.commons.lang3.Validate;
import java.nio.channels.SeekableByteChannel;
/**
* Provide an in-memory backed implementation for streaming data to a consumer
*/
public final class InMemoryChannelFactory {
private InMemoryChannelFactory() {}
/**
* Create a new instance of the factory using the provided byte array
*
* @param bytes containing the data to provide to consumers in an immutable manner
* @return a new instance
*/
public static SeekableByteChannelFactory create(final byte[] bytes) {
return ImmutableChannelFactory.create(new InMemoryChannelFactoryImpl(bytes));
}
/**
* Private class to hide implementation details from callers
*/
private static final class InMemoryChannelFactoryImpl implements SeekableByteChannelFactory {
/**
* The byte array this SeekableByteChannel is to represent.
*/
private final byte[] bytes;
private InMemoryChannelFactoryImpl(final byte[] bytes) {
Validate.notNull(bytes, "Required: bytes not null");
this.bytes = bytes;
}
/**
* Create an immutable byte channel to the existing byte array (no copy in/out regardless of how many channels are
* created)
*
* @return the new channel instance
*/
@Override
public SeekableByteChannel create() {
return new SeekableInMemoryByteChannel(bytes);
}
}
}