All Implemented Interfaces:
Serializable, DataStructure
Direct Known Subclasses:
SendMessageOptions

public class DateAndFlagsextends DataStructureImpl
A six-byte Date and 2 bytes of flags, since a Date won't encroach on the top two bytes until the year 10889.

The flag format is not specified here. The bits may be used in an application-specific manner. The application should be designed so that a flags value of 0 is the default, for compatibility with an 8-byte Date.

See extending class net.i2p.client.SendMessageOptions for more info.

If we really need some more bits we could use the first few bits of the third byte.

See Also:
  • Field Details

    • _flags

      protected int _flags
      Application-specific flags (bottom 16 bits).
    • _date

      private long _date
      Date in milliseconds since epoch.
  • Constructor Details

    • DateAndFlags

      public DateAndFlags()
      Create an empty date and zeroed flags; callers must call readDate() or set the fields before writing.
    • DateAndFlags

      public DateAndFlags(long date, int flags)
      Date in milliseconds since epoch.
      Parameters:
      date - the date in milliseconds since epoch
      flags - 0 - 65535
    • DateAndFlags

      public DateAndFlags(Date date, int flags)
      Stores the date as milliseconds since the epoch.
      Parameters:
      date - the date, truncated to the six wire bytes by writeDate()
      flags - 0 - 65535
  • Method Details

    • getFlags

      public int getFlags()
      0 - 65535.
      Returns:
      0 - 65535
    • setFlags

      public void setFlags(int flags)
      Replace the 16-bit flags field.
      Parameters:
      flags - 0 - 65535
    • getDate

      public Date getDate()
      The Date object is created here, it is not cached. Use getTime() if you only need the long value.
      Returns:
      a fresh Date, built from the millisecond timestamp on each call
    • getTime

      public long getTime()
      Date in milliseconds since epoch.
      Returns:
      the date in milliseconds since epoch
    • setDate

      public void setDate(long date)
      Set the date from a long timestamp.
      Parameters:
      date - the date in milliseconds since epoch
    • setDate

      public void setDate(Date date)
      Set the date from a Date object.
      Parameters:
      date - the Date to take the milliseconds from
    • readBytes

      public void readBytes(InputStream in) throws DataFormatException, IOException
      Load up the current object with data from the given stream. Data loaded this way must match the I2P data structure specification.

      Warning - many classes will throw IllegalStateException if data is already set.

      Parameters:
      in - stream to read from
      Throws:
      DataFormatException - if the data is improperly formatted
      IOException - if there was a problem reading the stream
    • writeBytes

      public void writeBytes(OutputStream out) throws DataFormatException, IOException
      Write out the data structure to the stream, using the format defined in the I2P data structure specification.
      Parameters:
      out - stream to write to
      Throws:
      DataFormatException - if the data was incomplete or not yet ready to be written
      IOException - if there was a problem writing to the stream
    • toByteArray

      public byte[] toByteArray()
      Overridden for efficiency.
      Specified by:
      toByteArray in interface DataStructure
      Overrides:
      toByteArray in class DataStructureImpl
      Returns:
      may be null if data is not set
    • fromByteArray

      public void fromByteArray(byte[] data) throws DataFormatException
      Overridden for efficiency.
      Specified by:
      fromByteArray in interface DataStructure
      Overrides:
      fromByteArray in class DataStructureImpl
      Parameters:
      data - non-null
      Throws:
      DataFormatException - if null or wrong length
    • equals

      public boolean equals(Object object)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object