All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.redkale.convert.Writer Maven / Gradle / Ivy

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.redkale.convert;

import java.lang.reflect.*;

/**
 * 序列化的数据输出流
 *
 * 

* 详情见: https://redkale.org * * @author zhangjx */ public abstract class Writer { //当前对象输出字段名之前是否需要分隔符, JSON字段间的分隔符为,逗号 protected boolean comma; //convertTo时是否以指定Type的ObjectEncoder进行处理 protected Type specify; /** * 设置specify * * @param value Type */ public void specify(Type value) { if (value instanceof GenericArrayType) { this.specify = ((GenericArrayType) value).getGenericComponentType(); } else if (value instanceof Class && ((Class) value).isArray()) { this.specify = ((Class) value).getComponentType(); } else { this.specify = value; } } /** * 返回specify * * @return int */ public Type specify() { return this.specify; } /** * 当tiny=true时, 字符串为空、boolean为false的字段值都会被跳过, 不会输出。 * * @return 是否简化 */ public abstract boolean tiny(); /** * 输出null值 */ public abstract void writeNull(); /** * 是否需要写入类名, BSON需要, JSON不需要 * * @return boolean */ public abstract boolean needWriteClassName(); /** * 写入类名 * * @param clazz 类名 */ public abstract void writeClassName(String clazz); /** * 输出一个对象前的操作 * 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj); * * @param obj 写入的对象 * * @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小 */ public int writeObjectB(Object obj) { this.comma = false; return -1; } /** * 输出一个为null的对象 * * @param clazz 对象的类名 */ public final void writeObjectNull(final Class clazz) { writeClassName(null); writeNull(); } /** * 输出一个对象的某个字段 * * @param member 字段 * * @param obj 写入的对象 */ @SuppressWarnings("unchecked") public void writeObjectField(final EnMember member, Object obj) { Object value = member.attribute.get(obj); if (value == null) return; if (tiny()) { if (member.istring) { if (((CharSequence) value).length() == 0) return; } else if (member.isbool) { if (!((Boolean) value)) return; } } this.writeFieldName(member); member.encoder.convertTo(this, value); this.comma = true; } /** * 输出一个对象后的操作 * * @param obj 写入的对象 */ public abstract void writeObjectE(Object obj); /** * 输出一个数组前的操作 * * @param size 数组长度 * @param encoder Encodeable * @param obj 对象 * * @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小 */ public abstract int writeArrayB(int size, Encodeable encoder, Object obj); /** * 输出数组元素间的间隔符 * */ public abstract void writeArrayMark(); /** * 输出一个数组后的操作 * */ public abstract void writeArrayE(); /** * 输出一个Map前的操作 * * @param size map大小 * @param keyEncoder Encodeable * @param valueEncoder Encodeable * @param obj 对象 * * @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小 */ public abstract int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj); /** * 输出一个Map中key与value间的间隔符 * */ public abstract void writeMapMark(); /** * 输出一个Map后的操作 * */ public abstract void writeMapE(); /** * 输出一个字段名 * * @param member 字段的EnMember对象 */ public abstract void writeFieldName(EnMember member); /** * 写入一个boolean值 * * @param value boolean值 */ public abstract void writeBoolean(boolean value); /** * 写入一个byte值 * * @param value byte值 */ public abstract void writeByte(byte value); /** * 写入byte[] * * @param values byte[] */ public abstract void writeByteArray(byte[] values); /** * 写入一个char值 * * @param value char值 */ public abstract void writeChar(char value); /** * 写入一个short值 * * @param value short值 */ public abstract void writeShort(short value); /** * 写入一个int值 * * @param value int值 */ public abstract void writeInt(int value); /** * 写入一个long值 * * @param value long值 */ public abstract void writeLong(long value); /** * 写入一个float值 * * @param value float值 */ public abstract void writeFloat(float value); /** * 写入一个double值 * * @param value double值 */ public abstract void writeDouble(double value); /** * 写入无转义字符长度不超过255的字符串, 例如枚举值、字段名、类名字符串等 * * * @param value 非空且不含需要转义的字符的String值 */ public abstract void writeSmallString(String value); /** * 写入一个String值 * * @param value String值 */ public abstract void writeString(String value); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy