我已经阅读到Smile和JSON之间的转换可以在以下几个来源中有效完成:
这意味着可以在不丢失信息的情况下高效地完成JSON和Smile之间的转换。 (github, jackson-docs);
两种格式兼容:通过包装适当的解码器,您可以发送Smile和解码为JSON。 (stackoverflow)
甚至Wikipedia:... ...这意味着,只要存在正确的编码器/解码器供工具使用,也可以将基于JSON的工具与Smile一起使用。
不幸的是,除了关于编码器/解码器的信息,我在任何来源都找不到任何有用的信息。
因此,一般的问题是如何做到这一点?
有内置的方法可以做到这一点吗?
如果没有,是否有一些自定义且已实施的解决方案?
如果没有,请给我一些有关编写编码器/解码器的提示。
最佳答案
public class JsonSmileMigrationService
{
private static final Logger log = LoggerFactory.getLogger(JsonSmileMigrationService.class);
public static byte[] convertToSmile(byte[] json, JsonFactory jsonFactory, SmileFactory smileFactory)
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try // try-with-resources
(
JsonGenerator jg = smileFactory.createGenerator(bos);
JsonParser jp = jsonFactory.createParser(json)
)
{
while (jp.nextToken() != null)
{
jg.copyCurrentEvent(jp);
}
}
catch (Exception e)
{
log.error("Error while converting json to smile", e);
}
return bos.toByteArray();
}
public static byte[] convertToJson(byte[] smile, JsonFactory jsonFactory, SmileFactory smileFactory)
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try // try-with-resources
(
JsonParser sp = smileFactory.createParser(smile);
JsonGenerator jg = jsonFactory.createGenerator(bos)
)
{
while (sp.nextToken() != null)
{
jg.copyCurrentEvent(sp);
}
}
catch (Exception e)
{
log.error("Error while converting smile to json", e);
}
return bos.toByteArray();
}
}