Package uk.ac.starlink.table.formats
Class StreamStarTable
- java.lang.Object
-
- uk.ac.starlink.table.AbstractStarTable
-
- uk.ac.starlink.table.formats.StreamStarTable
-
- All Implemented Interfaces:
StarTable
- Direct Known Subclasses:
AsciiStarTable
,CsvStarTable
public abstract class StreamStarTable extends AbstractStarTable
Abstract superclass for tables which reads a stream of characters to obtain the row data and metadata. Since metadata is typically scarce in such tables, the strategy is to make one pass through the data attempting to work out column types etc at table initialisation time, and to make a further pass through for each required RowSequence, using the metadata obtained earlier.- Since:
- 21 Sep 2004
- Author:
- Mark Taylor (Starlink)
- See Also:
RowEvaluator
-
-
Field Summary
Fields Modifier and Type Field Description protected static char
END
Char representation of -1 (as returned end-of-stream read)
-
Constructor Summary
Constructors Modifier Constructor Description protected
StreamStarTable()
Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description int
getColumnCount()
Returns the number of columns in this table.ColumnInfo
getColumnInfo(int icol)
Returns the object describing the data in a given column.protected java.io.PushbackInputStream
getInputStream()
Convenience method which returns a buffered pushback stream based on this table's data source.long
getRowCount()
Returns the number of rows in this table, if known.RowSequence
getRowSequence()
Returns an object which can iterate over all the rows in the table sequentially.protected void
init(uk.ac.starlink.util.DataSource datsrc)
Initialises the table from the input stream.protected abstract RowEvaluator.Metadata
obtainMetadata()
Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.protected abstract java.util.List
readRow(java.io.PushbackInputStream in)
Reads the next row of data from a given stream.-
Methods inherited from class uk.ac.starlink.table.AbstractStarTable
checkedLongToInt, getCell, getColumnAuxDataInfos, getName, getParameterByName, getParameters, getRow, getURL, isRandom, setName, setParameter, setParameters, setURL
-
-
-
-
Field Detail
-
END
protected static final char END
Char representation of -1 (as returned end-of-stream read)- See Also:
- Constant Field Values
-
-
Constructor Detail
-
StreamStarTable
protected StreamStarTable()
Constructor. This doesn't perform any processing; you must callinit(uk.ac.starlink.util.DataSource)
before doing anything with the constructed table. It is arranged this way so that the initialisation is able to call overridden methods in subclasses, which is a Bad thing to do from a constructor.
-
-
Method Detail
-
init
protected void init(uk.ac.starlink.util.DataSource datsrc) throws TableFormatException, java.io.IOException
Initialises the table from the input stream. This method callsobtainMetadata()
, which probably reads through some or all of the stream.- Parameters:
datsrc
- data source from which the stream can be obtained- Throws:
TableFormatException
java.io.IOException
-
getColumnCount
public int getColumnCount()
Description copied from interface:StarTable
Returns the number of columns in this table.- Specified by:
getColumnCount
in interfaceStarTable
- Specified by:
getColumnCount
in classAbstractStarTable
- Returns:
- the number of columns
-
getRowCount
public long getRowCount()
Description copied from interface:StarTable
Returns the number of rows in this table, if known. If the number of rows cannot be (easily) determined, a value of -1 will be returned.- Specified by:
getRowCount
in interfaceStarTable
- Specified by:
getRowCount
in classAbstractStarTable
- Returns:
- the number of rows, or -1
-
getColumnInfo
public ColumnInfo getColumnInfo(int icol)
Description copied from interface:StarTable
Returns the object describing the data in a given column.- Specified by:
getColumnInfo
in interfaceStarTable
- Specified by:
getColumnInfo
in classAbstractStarTable
- Parameters:
icol
- the column for which header information is required- Returns:
- a ValueInfo object for column icol
-
getRowSequence
public RowSequence getRowSequence() throws java.io.IOException
Description copied from interface:StarTable
Returns an object which can iterate over all the rows in the table sequentially.- Specified by:
getRowSequence
in interfaceStarTable
- Specified by:
getRowSequence
in classAbstractStarTable
- Returns:
- an object providing sequential access to the table data
- Throws:
java.io.IOException
- if there is an error providing access
-
getInputStream
protected java.io.PushbackInputStream getInputStream() throws java.io.IOException
Convenience method which returns a buffered pushback stream based on this table's data source.- Returns:
- input stream containing source data
- Throws:
java.io.IOException
-
obtainMetadata
protected abstract RowEvaluator.Metadata obtainMetadata() throws TableFormatException, java.io.IOException
Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.- Returns:
- information about the table represented by the character stream
- Throws:
TableFormatException
- if the data doesn't represent this kind of tablejava.io.IOException
- if I/O error is encountered
-
readRow
protected abstract java.util.List readRow(java.io.PushbackInputStream in) throws TableFormatException, java.io.IOException
Reads the next row of data from a given stream. Ignorable rows are skipped; comments may be stashed away.- Parameters:
in
- input stream- Returns:
- list of Strings one for each cell in the row, or null for end of stream
- Throws:
TableFormatException
- if the data doesn't represent this kind of tablejava.io.IOException
- if I/O error is encountered
-
-