static final Time read(HproseReader reader, InputStream stream) throws IOException { int tag = stream.read(); switch (tag) { case TagDate: return DefaultUnserializer.readDateTime(reader, stream).toTime(); case TagTime: return DefaultUnserializer.readTime(reader, stream).toTime(); case TagNull: case TagEmpty: return null; case TagString: return Time.valueOf(StringUnserializer.readString(reader, stream)); case TagRef: return toTime(reader.readRef(stream)); } if (tag >= '0' && tag <= '9') return new Time(tag - '0'); switch (tag) { case TagInteger: case TagLong: return new Time(ValueReader.readLong(stream)); case TagDouble: return new Time(Double.valueOf(ValueReader.readDouble(stream)).longValue()); default: throw ValueReader.castError(reader.tagToString(tag), Time.class); } }
@Override public Short unserialize(Reader reader, int tag, Type type) throws IOException { if (tag >= '0' && tag <= '9') return (short) (tag - '0'); if (tag == TagInteger) return (short) ValueReader.readInt(reader, TagSemicolon); switch (tag) { case TagLong: return (short) ValueReader.readLong(reader, TagSemicolon); case TagDouble: return Double.valueOf(ValueReader.readDouble(reader)).shortValue(); case TagEmpty: return 0; case TagTrue: return 1; case TagFalse: return 0; case TagUTF8Char: return Short.parseShort(ValueReader.readUTF8Char(reader)); case TagString: return Short.parseShort(ReferenceReader.readString(reader)); } return super.unserialize(reader, tag, type); }