转[http://blog.csdn.net/pztyz314151/article/details/52958495]
最近是用Scala开发了一个项目,其中有个环节需要将类似Tuple2[String, Map[String, Case class]]对象作为中间结果缓存至Redis中。
中间对象结构如下:
case class TestDO(var id :Int = 0, var value : String = null) case class Test2DO(var arrayBuffer: ArrayBuffer[TestDO] = null) Tuple2[String, Map[String, Test2DO]]
tuple2是需要缓存的数据结构。
缓存redis,第一时间想到的是序列化,序列化与反序列化代码如下
/** * 序列化 * @param obj * @return */ def serialize(obj: Object): Array[Byte] = { try { val baos = new ByteArrayOutputStream(); val oos = new ObjectOutputStream(baos); oos.writeObject(obj) val array: Array[Byte] = baos.toByteArray oos.close() baos.close() array } catch { case e: Exception => println(e) null } } /** * 反序列化 * @param bytes * @return */ def deSerialize(bytes : Array[Byte]) :Object ={ try{ val bais = new ByteArrayInputStream(bytes) val ois=new ObjectInputStream(bais) val obj=ois.readObject() bais.close() ois.close() obj }catch { case e: Exception => println("deSerialize" + e) null } }
在本机的开发测试过程中,序列化这个很完美,没有出现丝毫任何错误。但是当我丢到集群环境运行行,出现了大量反序列化的错误,说无法找到Test2DO这个class。各种查错,最后发现集群环节是jdk 1.7,而本机开发环境是jdk1.8。初步觉得可能是这个原因导致的~~~然后验证了,结论就不在此阐述了。
考虑到开发部署的方便性,最后选择将中间结果以json的格式缓存至redis。这个时候便开始用scala转json了。
第一个是阿里开源出来的fastjosn,第二个是gson,感觉都不错.maven 中的依赖如下:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.36</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency>
演示过程:
单个case calss
arraybuffer
输入 val gson = new Gson() println(gson.toJson(Test2DO(ArrayBuffer(TestDO(1, "12"), TestDO(1, "12"), TestDO(1, "12"))))) 输出 {"arrayBuffer":{"initialSize":16,"array":[{"id":1,"value":"12"},{"id":1,"value":"12"},{"id":1,"value":"12"},null,null,null,null,null,null,null,null,null,null,null,null,null],"size0":3}}
Map,Set, List等类似
相信大家已经看出了跟javabean对象tojson之后的不一样,因为项目周期的原因,博主这边做了一个土鳖的方法,将上述scala对象全部转出了Java对象进行tojson保存至redis之中,然后在取出json转化成javabean对象在转化成scala 对象进行了过渡处理。希望大家在使用过程中注意,或者有其他解决方案也希望亲能给我留言,期待完美方案。
相关推荐
sjson, 具有 Scala 对象序列化功能的Scala Json sjson: Scala 中的透明JSON序列化sjson为 Scala 对象提供非侵入性序列化。 可以使用sjson来序列化内置类型。基本通用数据类型和你设计的任何自定义数据类型。 现在...
Avro是一个数据序列化系统,设计用于支持大 批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理 Avro数据。 ...
6. **序列化与反序列化**:JSON库通常包含序列化和反序列化功能,允许我们将JSON数据转换为或从Scala的case类或自定义对象中恢复。 7. **兼容性**:考虑到与其他系统的交互,一个良好的JSON库应该支持JSON标准,并...
这种方法比使用json4s序列化机制更快。 支持案例类,列表,字符串,日期,数字,布尔值和映射(当键为字符串时) 通过特征支持多态:在同一程序包中找到特征实现 使用注释自定义架构(如最小/最大大小,描述) ...
4. `json4s-jackson`:另一个JSON序列化器,使用Jackson库进行序列化和反序列化。 5. 示例和测试代码:展示如何使用JSON4S和Scalaz进行实际操作。 在处理这个压缩包时,开发者通常会解压后导入项目到IDE,例如...
Avro类型到Scala类型的免模板反序列化 注意:本文参考4.0发行版。 模式 与Json不同,Avro是基于架构的格式。 您会发现自己想要频繁生成模式,而手工或通过基于Java的SchemaBuilder类编写模式对于复杂的域模型而言...
Scala 的序列化库。 这是在实验阶段,开始作为一种尝试新的 Scala 2.10,现在更新为 Scala 2.11。 设计目标 可序列化的对象应该是常规的 Scala 类(没有注释,没有基本特征) 支持多种格式; 当前 JSON(使用 ...
总的来说,"钻探:Scala中高效的CBOR和JSON(反序列化)"这个主题涉及到使用Scala开发的Borer库,该库致力于提供高效的CBOR和JSON反序列化解决方案。它可能是通过优化的算法、类型安全的设计和充分利用Scala的编程...
Fastjson是阿里巴巴开源的一个高性能的JSON库,不仅支持JSON与Java对象之间的转换,还提供了序列化和反序列化功能。在处理大量数据时,Fastjson表现出了优秀的性能。它可以将Java对象直接转换为JSON字符串,反之亦然...
该项目还演示了如何使用这些不同的 JSON 库来反序列化 Scala case class 。 当然,我们也提供了运行基准测试和生成测试数据的代码,可能有用.ja关于图书馆其中一些库(Rapture 和 Json4s)使用 ,Java JSON 解析库...
的库,它允许您序列化/反序列化 Scala 案例类、原始类型到/从 JSON 表示。 为什么是 json 绑定器? 已经存在许多用于相同目的的库,例如scala/pickling upickle 、 upickle 、 spray-json面向 Scala 和FasterXML/...
pushka, 带注释的纯 Scala 序列化库 Pushka Pushka是一个没有任何运行时反射实现的序列化库。 为了达到良好的输出JSON和良好性能,它创建了。 Pushka在 Scala ( 2.10,2.11,2.12 ) 和 Scala.js. 上工作良好动机大
"akka-http-json"项目就是为了解决这个问题,它提供了将Scala中最佳的JSON库与Akka HTTP整合的工具,使得开发者可以方便地进行JSON序列化和反序列化。 首先,我们需要理解Akka HTTP的核心特性。它提供了一个低级的...
- **Pickling**:Scala Pickling提供了一种简单的方式来序列化和反序列化Scala对象,支持多种格式,如JSON、Binary和XML。 - **Shapeless**:虽然主要是一个类型级编程库,但Shapeless也可以用于编译时的序列化和...
这个特定的库可能提供了序列化和反序列化JSON的能力,使得开发人员能够轻松地将JSON字符串转换为Scala集合,如List、Map等,反之亦然。这极大地方便了数据的读取、解析和写入,特别是在与服务器进行交互或者处理API...
在本文中,我们将深入探讨`bottledynamo`项目,这是一个专门为Scala开发的库,它利用Twitter Futures和Circe库来实现对AWS DynamoDB的高效、流畅的JSON序列化和操作。`bottledynamo`是针对无SQL数据库系统的持久层...
总之,`kafka-serde-scala`简化了在Scala项目中使用Kafka时的序列化和反序列化工作。它支持多种流行的数据格式(如JSON、Avro、Protobuf),并且能够自动从类型类编码器构建`Serde`,极大地提高了开发效率。通过这个...
二进制序列化通常比基于文本的序列化(如 JSON 或 XML)更高效,因为它产生的数据量较小,但在某些情况下可能更难以阅读和调试。 Desert 库的核心目标是提供一种简洁、快速且安全的方式来处理 Scala 对象的序列化,...
Upickle库提供了一个简洁的API,使得在Scala中进行JSON序列化和反序列化变得非常直观。 其次,**MessagePack**是另一种高效的二进制序列化格式,它比JSON更节省空间,速度也更快。MessagePack设计的目标是提供一种...
**MessagePackKafkaSerde** 是一个专门为Apache Kafka设计的序列化和反序列化工具,它支持MessagePack格式的消息,并能将其转换为JSON以及Byte数组,以适应在Apache Druid数据库中的使用。MessagePack是一种轻量级的...