Class 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 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 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 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 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
        java.io.IOException
      • 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 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 interface StarTable
        Specified by:
        getRowSequence in class AbstractStarTable
        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 table
        java.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 table
        java.io.IOException - if I/O error is encountered