# Class BAMCodec

java.lang.Object
htsjdk.beta.codecs.reads.bam.BAMCodec

All Implemented Interfaces:
  `HtsCodec<ReadsDecoderOptions, ReadsEncoderOptions>, ReadsCodec, Upgradeable`

Direct Known Subclasses:
  `BAMCodecV1_0`

@InternalAPI public abstract class BAMCodec extends Object implements ReadsCodec
InternalAPI Base class for `BundleResourceType.FMT_READS_BAM` codecs.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final HtsVersion`
`BAM_DEFAULT_VERSION`

## Constructor Summary

Constructors
Constructor
Description
`BAMCodec()`

## Method Summary

Modifier and Type
Method
Description
`boolean`
`canDecodeURI(IOPath ioPath)`
Determine if the URI for `ioPath` (obtained via `IOPath.getURI()`) conforms to the expected URI format this codec's file format.
`String`
`getFileFormat()`
Get the name of the file format supported by this codec.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface HtsCodec

`canDecodeSignature, getDecoder, getDisplayName, getEncoder, getSignatureLength, getSignatureProbeLength, getVersion, ownsURI`

### Methods inherited from interface ReadsCodec

`getContentType`

### Methods inherited from interface Upgradeable

`runVersionUpgrade`

## Field Details

### BAM_DEFAULT_VERSION

public static final HtsVersion BAM_DEFAULT_VERSION

## Constructor Details

### BAMCodec

public BAMCodec()

## Method Details

### getFileFormat

public String getFileFormat()
Description copied from interface: `HtsCodec`
Get the name of the file format supported by this codec. The format name defines the underlying format handled by this codec, and also corresponds to the format of the primary bundle resource that is required when decoding or encoding (see `BundleResourceType` and `BundleResource.getFileFormat()`).

Specified by:
  `getFileFormat` in interface `HtsCodec<ReadsDecoderOptions, ReadsEncoderOptions>`
Returns:
  the name of the underlying file format handled by this codec

### canDecodeURI

public boolean canDecodeURI(IOPath ioPath)
Description copied from interface: `HtsCodec`
Determine if the URI for `ioPath` (obtained via `IOPath.getURI()`) conforms to the expected URI format this codec's file format. Most implementations only look at the file extension (see `IOPath.hasExtension(String)`). For codecs that implement formats that use specific, well known file extensions, the codec should reject inputs that do not conform to any of the accepted extensions. If the format does not use a specific extension, or if the codec cannot determine if it can decode the underlying resource without inspecting the underlying stream, it is safe to return true, after which the framework will subsequently call this codec's `HtsCodec.canDecodeSignature(SignatureStream, String)` method, at which time the codec can inspect the actual underlying stream via the `SignatureStream`.

Implementations should generally not inspect the URI's protocol scheme unless the file format supported by the codec requires the use a specific protocol scheme. For codecs that do own a specific scheme or URI format, the return values for `HtsCodec.ownsURI(IOPath)` and `HtsCodec.canDecodeURI(IOPath)` must always be the same (both true or both false) for a given IOPath. For codecs that do not use a custom URI (and rely on NIO access), @link #ownsURI(IOPath)} should always return false, with only the value returned from `HtsCodec.canDecodeURI(IOPath)` varying based on features such as file extension probes.

It is never safe to attempt to directly inspect the underlying stream for `ioPath` in this method. If the stream needs to be inspected, it should be done using the signature stream when the `HtsCodec.canDecodeSignature(SignatureStream, String)` method is called.

For custom URI handlers (see `HtsCodec.ownsURI(IOPath)`, codecs should avoid making remote calls to determine the suitability of the input resource; the return value for this method should be based only on the format of the URI that is presented. Since this method is used during codec resolution, implementations should avoid calling methods that may throw exceptions.

Specified by:
  `canDecodeURI` in interface `HtsCodec<ReadsDecoderOptions, ReadsEncoderOptions>`
Parameters:
  `ioPath` - to be decoded
Returns:
  true if the codec can provide a decoder to provide this URI