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 void appendFinishedValueTypeName(TextOutput out) { if (isList) { out.append("java.util.List<"); componentParser.appendFinishedValueTypeName(out); out.append('>'); } else { componentParser.appendFinishedValueTypeName(out); out.append("[]"); } }
@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); }
static final Timestamp[] read(HproseReader reader, InputStream stream) throws IOException { int tag = stream.read(); switch (tag) { case TagNull: return null; case TagList: { int count = ValueReader.readInt(stream, TagOpenbrace); Timestamp[] a = new Timestamp[count]; reader.refer.set(a); for (int i = 0; i < count; ++i) { a[i] = TimestampUnserializer.read(reader, stream); } stream.read(); return a; } case TagRef: return (Timestamp[]) reader.readRef(stream); default: throw ValueReader.castError(reader.tagToString(tag), Array.class); } }
static final Locale read(HproseReader reader, InputStream stream) throws IOException { int tag = stream.read(); switch (tag) { case TagNull: case TagEmpty: return null; case TagString: return readLocale(reader, stream); case TagRef: return toLocale(reader.readRef(stream)); default: throw ValueReader.castError(reader.tagToString(tag), Locale.class); } }
static final Locale read(HproseReader reader, ByteBuffer buffer) throws IOException { int tag = buffer.get(); switch (tag) { case TagNull: case TagEmpty: return null; case TagString: return readLocale(reader, buffer); case TagRef: return toLocale(reader.readRef(buffer)); default: throw ValueReader.castError(reader.tagToString(tag), Locale.class); } }
@Override public byte[] unserialize(Reader reader, int tag, Type type) throws IOException { switch (tag) { case TagEmpty: return new byte[0]; case TagBytes: return ReferenceReader.readBytes(reader); case TagList: return ReferenceReader.readByteArray(reader); case TagUTF8Char: return ValueReader.readUTF8Char(reader).getBytes("UTF-8"); case TagString: return ReferenceReader.readString(reader).getBytes("UTF-8"); } return super.unserialize(reader, tag, type); }
static final Locale readLocale(HproseReader reader, InputStream stream) throws IOException { Locale locale = toLocale(ValueReader.readString(stream)); reader.refer.set(locale); return locale; }
static final Locale readLocale(HproseReader reader, ByteBuffer buffer) throws IOException { Locale locale = toLocale(ValueReader.readString(buffer)); reader.refer.set(locale); return locale; }
@Override void writeReadCode(ClassScope scope, boolean subtyping, String fieldName, TextOutput out) { componentParser.writeArrayReadCode(scope, subtyping, isNullable(), fieldName, out); }