예제 #1
0
 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);
 }