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:
Closeable
,AutoCloseable
,StarTable
- Direct Known Subclasses:
AsciiStarTable
,CsvStarTable
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:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final char
Char representation of -1 (as returned end-of-stream read) -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint
Returns the number of columns in this table.getColumnInfo
(int icol) Returns the object describing the data in a given column.protected PushbackInputStream
Convenience method which returns a buffered pushback stream based on this table's data source.long
Returns the number of rows in this table, if known.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
Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.Reads the next row of data from a given stream.Methods inherited from class uk.ac.starlink.table.AbstractStarTable
checkedLongToInt, close, getCell, getColumnAuxDataInfos, getName, getParameters, getRow, getRowAccess, getRowSplittable, getURL, isRandom, setName, setParameters, setURL
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface uk.ac.starlink.table.StarTable
getParameterByName, setParameter
-
Field Details
-
END
protected static final char ENDChar representation of -1 (as returned end-of-stream read)- See Also:
-
-
Constructor Details
-
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 Details
-
init
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
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
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
Description copied from interface:StarTable
Returns an object which can iterate over all the rows in the table sequentially. Each such returned object is safe for use within a single thread, but not in general from multiple threads concurrently.- Specified by:
getRowSequence
in interfaceStarTable
- Specified by:
getRowSequence
in classAbstractStarTable
- Returns:
- new RowSequence
- Throws:
IOException
- if there is an error providing access
-
getInputStream
Convenience method which returns a buffered pushback stream based on this table's data source.- Returns:
- input stream containing source data
- Throws:
IOException
-
obtainMetadata
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 tableIOException
- if I/O error is encountered
-
readRow
protected abstract List<String> readRow(PushbackInputStream in) throws TableFormatException, 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 tableIOException
- if I/O error is encountered
-