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:
java.io.Closeable,java.lang.AutoCloseable,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 charENDChar representation of -1 (as returned end-of-stream read)
-
Constructor Summary
Constructors Modifier Constructor Description protectedStreamStarTable()Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description intgetColumnCount()Returns the number of columns in this table.ColumnInfogetColumnInfo(int icol)Returns the object describing the data in a given column.protected java.io.PushbackInputStreamgetInputStream()Convenience method which returns a buffered pushback stream based on this table's data source.longgetRowCount()Returns the number of rows in this table, if known.RowSequencegetRowSequence()Returns an object which can iterate over all the rows in the table sequentially.protected voidinit(uk.ac.starlink.util.DataSource datsrc)Initialises the table from the input stream.protected abstract RowEvaluator.MetadataobtainMetadata()Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.protected abstract java.util.List<java.lang.String>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, 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 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.IOExceptionInitialises 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:
TableFormatExceptionjava.io.IOException
-
getColumnCount
public int getColumnCount()
Description copied from interface:StarTableReturns the number of columns in this table.- Specified by:
getColumnCountin interfaceStarTable- Specified by:
getColumnCountin classAbstractStarTable- Returns:
- the number of columns
-
getRowCount
public long getRowCount()
Description copied from interface:StarTableReturns 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:
getRowCountin interfaceStarTable- Specified by:
getRowCountin classAbstractStarTable- Returns:
- the number of rows, or -1
-
getColumnInfo
public ColumnInfo getColumnInfo(int icol)
Description copied from interface:StarTableReturns the object describing the data in a given column.- Specified by:
getColumnInfoin interfaceStarTable- Specified by:
getColumnInfoin 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:StarTableReturns 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:
getRowSequencein interfaceStarTable- Specified by:
getRowSequencein classAbstractStarTable- Returns:
- new RowSequence
- Throws:
java.io.IOException- if there is an error providing access
-
getInputStream
protected java.io.PushbackInputStream getInputStream() throws java.io.IOExceptionConvenience 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<java.lang.String> readRow(java.io.PushbackInputStream in) throws TableFormatException, java.io.IOExceptionReads 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
-
-