使用BASE64压缩byte[]到GSON
来源:互联网 发布:java utf8编码转换gbk 编辑:程序博客网 时间:2024/06/05 00:14
接上一篇
/* * GOSN常用类 * To change this template, choose Tools | Templates * and open the template in the editor. */package cn.brtx.carsharing.tools;import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.google.gson.JsonDeserializationContext;import com.google.gson.JsonDeserializer;import com.google.gson.JsonElement;import com.google.gson.JsonParseException;import com.google.gson.JsonPrimitive;import com.google.gson.JsonSerializationContext;import com.google.gson.JsonSerializer;import java.lang.reflect.Type;import java.sql.Timestamp;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import android.util.Base64;/** *toJson的相关方法 * @author Administrator */public class GSONTOOLS { /** * 获取GSON转换模式,默认日期格式为“yyyy-MM-dd HH:mm:ss” * @return */ public static Gson getGson() { GsonBuilder builder = new GsonBuilder(); // 不转换没有 @Expose 注解的字段 builder.excludeFieldsWithoutExposeAnnotation(); builder.registerTypeAdapter(Timestamp.class, new TimestampTypeAdapter()).setDateFormat("yyyy-MM-dd HH:mm:ss").create(); builder.registerTypeHierarchyAdapter(byte[].class, new ByteArrayTypeAdapter()).create(); Gson gson = builder.create(); return gson; } /** * 获取GSON转换模式,设置时间格式为dataFat * @param dataFat 时间格式 * @return */ public static Gson getGson(String dataFat) { GsonBuilder builder = new GsonBuilder(); // 不转换没有 @Expose 注解的字段 builder.excludeFieldsWithoutExposeAnnotation(); builder.registerTypeAdapter(Timestamp.class, new TimestampTypeAdapter()).setDateFormat(dataFat).create(); builder.registerTypeHierarchyAdapter(byte[].class, new ByteArrayTypeAdapter()).create(); Gson gson = builder.create(); return gson; }}/** * json包含日期类型的时候的处理方法 * @author Administrator */class TimestampTypeAdapter implements JsonSerializer<Timestamp>, JsonDeserializer<Timestamp> { private final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public JsonElement serialize(Timestamp src, Type arg1, JsonSerializationContext arg2) { String dateFormatAsString = format.format(new Date(src.getTime())); return new JsonPrimitive(dateFormatAsString); } public Timestamp deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (!(json instanceof JsonPrimitive)) { throw new JsonParseException("The date should be a string value"); } try { Date date = format.parse(json.getAsString()); return new Timestamp(date.getTime()); } catch (ParseException e) { throw new JsonParseException(e); } }}class ByteArrayTypeAdapter implements JsonSerializer<byte[]>, JsonDeserializer<byte[]> { public JsonElement serialize(byte[] src, Type typeOfSrc, JsonSerializationContext context) { String base64 = Base64.encodeToString(src, 0, src.length, Base64.DEFAULT); return new JsonPrimitive(base64); } public byte[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { if (!(json instanceof JsonPrimitive)) { throw new JsonParseException("The date should be a string value"); } try { byte[] base64 = Base64.decode(json.getAsString(), Base64.DEFAULT); return base64; } catch (Exception ex) { } return null; }}