# Class ByteStoreRowStore

java.lang.Object
uk.ac.starlink.table.storage.ByteStoreRowStore

All Implemented Interfaces:
  `RowStore, TableSink`

Direct Known Subclasses:
  `DiskRowStore`

public class ByteStoreRowStore extends Object implements RowStore
RowStore based on a ByteStore. It uses custom serialization to encode some basic data types (primitives, Strings, and arrays of them) as a byte sequence. Therefore it may not cope with tables containing exotic objects. The actual storage destination is controlled by the `ByteStore` implementation used.

Since:
  5 Nov 2009
Author:
  Mark Taylor

## Constructor Summary

Constructors
Constructor
Description
`ByteStoreRowStore(ByteStore byteStore)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`void`
`acceptMetadata(StarTable meta)`
Takes delivery of a row-less `StarTable` object which defines the metadata of the table to be transmitted.
`void`
`acceptRow(Object[] row)`
Takes delivery of one row of data.
`void`
`endRows()`
Signals that there are no more rows to be transmitted.
`ByteStore`
`getByteStore()`
Returns the underlying storage for this row store.
`StarTable`
`getStarTable()`
Obtains a StarTable which contains the data and metadata that have been written into this sink.

### Methods inherited from class Object

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

## Constructor Details

### ByteStoreRowStore

public ByteStoreRowStore(ByteStore byteStore)
Constructor.

Parameters:
  `byteStore` - storage container used by this row store

## Method Details

### getByteStore

public ByteStore getByteStore()
Returns the underlying storage for this row store.

Returns:
  buffer holding byte data

### acceptMetadata

public void acceptMetadata(StarTable meta) throws TableFormatException
Description copied from interface: `TableSink`
Takes delivery of a row-less `StarTable` object which defines the metadata of the table to be transmitted. If the number of rows that will be transmitted via subsequent calls to `acceptRow` is known, this value should be made available as the row count of `meta` (`StarTable.getRowCount()`); if it is not known, the row count should be -1. However, this object should not attempt to read any of `meta`'s cell data.

The data to be transmitted in subsequent calls of `acceptRow` must match the metadata transmitted in this call in the same way that rows of a StarTable must match its own metadata (number and content clases of columns etc). If this sink cannot dispose of a table corresponding to `meta` then it may throw a TableFormatException - this may be the case if for instance `meta` has columns with types that this sink can't deal with.

Specified by:
  `acceptMetadata` in interface `TableSink`
Parameters:
  `meta` - table metadata object
Throws:
  `TableFormatException` - if this sink cannot accept table rows matching the given metadata

### acceptRow

public void acceptRow(Object[] row) throws IOException
Description copied from interface: `TableSink`
Takes delivery of one row of data. `row` is an array of objects comprising the contents of one row of the table being transmitted. The number and classes of the elements of `row` are described by the metadata object previously accepted.

Specified by:
  `acceptRow` in interface `TableSink`
Parameters:
  `row` - table data row
Throws:
  `IOException`

### endRows

public void endRows() throws IOException
Description copied from interface: `TableSink`
Signals that there are no more rows to be transmitted.

Specified by:
  `endRows` in interface `TableSink`
Throws:
  `IOException`

### getStarTable

public StarTable getStarTable()
Description copied from interface: `RowStore`
Obtains a StarTable which contains the data and metadata that have been written into this sink. In general it is only legal to call this method following a call to `TableSink.endRows()`; failing to observe this sequence may earn you an `IllegalStateException`

Specified by:
  `getStarTable` in interface `RowStore`
Returns:
  a random-access StarTable containing the written rows