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

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:
  • Field Details

    • END

      protected static final char END
      Char 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 call init(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

      protected void init(uk.ac.starlink.util.DataSource datsrc) throws TableFormatException, IOException
      Initialises the table from the input stream. This method calls obtainMetadata(), 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 interface StarTable
      Specified by:
      getColumnCount in class AbstractStarTable
      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 interface StarTable
      Specified by:
      getRowCount in class AbstractStarTable
      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 interface StarTable
      Specified by:
      getColumnInfo in class AbstractStarTable
      Parameters:
      icol - the column for which header information is required
      Returns:
      a ValueInfo object for column icol
    • getRowSequence

      public RowSequence getRowSequence() throws IOException
      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 interface StarTable
      Specified by:
      getRowSequence in class AbstractStarTable
      Returns:
      new RowSequence
      Throws:
      IOException - if there is an error providing access
    • getInputStream

      protected PushbackInputStream getInputStream() throws IOException
      Convenience method which returns a buffered pushback stream based on this table's data source.
      Returns:
      input stream containing source data
      Throws:
      IOException
    • obtainMetadata

      protected abstract RowEvaluator.Metadata obtainMetadata() throws TableFormatException, 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 table
      IOException - 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 table
      IOException - if I/O error is encountered