![JAR search and dependency download from the Maven repository](/logo.png)
htsjdk.samtools.cram.encoding.CRAMEncoding Maven / Gradle / Ivy
/**
* ****************************************************************************
* Copyright 2013 EMBL-EBI
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ****************************************************************************
*/
package htsjdk.samtools.cram.encoding;
import htsjdk.samtools.cram.io.BitInputStream;
import htsjdk.samtools.cram.io.BitOutputStream;
import htsjdk.samtools.cram.structure.EncodingID;
import htsjdk.samtools.cram.structure.EncodingParams;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Map;
/**
* An interface to describe how a data series is encoded.
* It also has methods to serialize/deserialize its parameters to/from a byte array
* and a method to construct a {@link CRAMCodec} instance.
*
* @param data series type
*/
public abstract class CRAMEncoding {
private final EncodingID encodingId;
/**
* Create a new encoding. Concrete implementation constructors will specify their parameters
* @param id the EncodingID associated with the concrete implementation
*/
protected CRAMEncoding(final EncodingID id) {
encodingId = id;
}
public EncodingID id() {
return encodingId;
}
public EncodingParams toParam() {
return new EncodingParams(id(), toByteArray());
}
/**
* Subclasses but have a defined serialization of their parameters
* @return a byte array representing a specific encoding's parameter values
*/
public abstract byte[] toByteArray();
/**
* Instantiate the codec represented by this encoding by supplying it with the appropriate streams
*
* @param coreBlockInputStream the core block bit stream a {@link htsjdk.samtools.cram.encoding.core.CoreCodec} will read from
* @param coreBlockOutputStream the core block bit stream a {@link htsjdk.samtools.cram.encoding.core.CoreCodec} will write to
* @param externalBlockInputMap the external block byte stream a {@link htsjdk.samtools.cram.encoding.external.ExternalCodec} will read from
* @param externalBlockOutputMap the external block byte stream a {@link htsjdk.samtools.cram.encoding.external.ExternalCodec} will write to
* @return a newly instantiated codec
*/
public abstract CRAMCodec buildCodec(final BitInputStream coreBlockInputStream,
final BitOutputStream coreBlockOutputStream,
final Map externalBlockInputMap,
final Map externalBlockOutputMap);
/**
* Convenience initializer method for read codecs
*
* @param coreBlockInputStream the core block bit stream a {@link htsjdk.samtools.cram.encoding.core.CoreCodec} will read from
* @param externalBlockInputMap the external block byte stream a {@link htsjdk.samtools.cram.encoding.external.ExternalCodec} will read from
* @return
*/
public CRAMCodec buildReadCodec(final BitInputStream coreBlockInputStream, final Map externalBlockInputMap) {
return buildCodec(coreBlockInputStream, null, externalBlockInputMap, null);
}
/**
* Convenience initializer method for write codecs
*
* @param coreBlockOutputStream the core block bit stream a {@link htsjdk.samtools.cram.encoding.core.CoreCodec} will write to
* @param externalBlockOutputMap the external block byte stream a {@link htsjdk.samtools.cram.encoding.external.ExternalCodec} will write to
* @return
*/
public CRAMCodec buildWriteCodec(final BitOutputStream coreBlockOutputStream, final Map externalBlockOutputMap) {
return buildCodec(null, coreBlockOutputStream, null, externalBlockOutputMap);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy