开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

MessagePack Java Jackson 在不关闭输入流(input stream)的情况下反序列化多变量

com.fasterxml.jackson.databind.ObjectMapper 在读取输入流变量的时候默认的将会关闭输入流。 如果你不希望关闭输入流,你可以设置 JsonParser.Feature.AUTO_CLOSE_SOURCE 参数为 false。 本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。   /** * Serialization Not Close input stream */ @Test public void testMessagePackSerializationNotCloseInputStream() { logger.debug("testMessagePackSerializationNotCloseInputStream"); try { File tempFile = File.createTempFile("messagepack-", "-cwiki.us"); MessagePacker packer = MessagePack.newDefaultPacker(new FileOutputStream(tempFile)); packer.packInt(42); packer.packString("Hello"); packer.close(); FileInputStream in = new FileInputStream(tempFile); ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); objectMapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, false); System.out.println(objectMapper.readValue(in, Integer.class)); System.out.println(objectMapper.readValue(in, String.class)); in.close(); tempFile.deleteOnExit(); } catch (IOException ex) { logger.error("Serialize Error", ex); } }   https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

2019年08月09日 0Comments 719Browse 0Like Read more
Computer Science

MessagePack Java Jackson 在不关闭输出流(output stream)的情况下序列化多变量

com.fasterxml.jackson.databind.ObjectMapper 在默认的情况下在写出输入后将会关闭输出流(output stream)。 如果你希望序列化多值变量在同一个输出流的情况下,你不希望在输出完一个就关闭输出流,你可以设置  JsonGenerator.Feature.AUTO_CLOSE_TARGET 参数为 False。 本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。   /** * Serialization Not Close output stream */ @Test public void testMessagePackSerializationNotCloseOutputStream() { logger.debug("testMessagePackSerializationNotCloseOutputStream"); try { File tempFile = File.createTempFile("messagepack-", "-cwiki.us"); OutputStream out = new FileOutputStream(tempFile); ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); objectMapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false); objectMapper.writeValue(out, 1); objectMapper.writeValue(out, "two"); objectMapper.writeValue(out, 3.14); out.close(); MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(new FileInputStream(tempFile)); System.out.println(unpacker.unpackInt()); // => 1 System.out.println(unpacker.unpackString()); // => two System.out.println(unpacker.unpackFloat()); // => 3.14 tempFile.deleteOnExit(); } catch (IOException ex) { logger.error("Serialize Error", ex); } }   https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

2019年08月09日 0Comments 841Browse 0Like Read more
Computer Science

MessagePack Java Jackson 序列化和反序列化 POJO 为 MessagePack 的数组类型用来与 msgpack-java:0.6 保持兼容性

在 msgpack-java 0.6 或者早期的版本中,POJO 在 MessagePack 中被序列化和反序列化为数组变量。 变量的顺序是基于 Java 类中变量的内部顺序了,这种本来是一种原生的序列化方法,但是会导致一些问题。导致这些问题的原因是在 Java 对象的内部变量的顺序与 Java 实现的顺序不能保证完全的一致。 从另外一个角度来看,使用 jackson-databind 进行的序列化和反序列化方式是基于 POJO 的 Key-Value 对的。因此在 jackson-dataformat-msgpack 与 POJO 处理的方式是相同的。因此,这就导致了与 msgpack-java:0.6 或者早期的版本在对 POJO 进行序列化和反序列化的时候不兼容。 如果你希望在新的版本中也使用与 msgpack-java:0.6 或者早期版本相同的处理 POJO 的方法,你可以使用 JsonArrayFormat。具体使用方法如下所示: ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); objectMapper.setAnnotationIntrospector(new JsonArrayFormat()); https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

2019年08月09日 0Comments 705Browse 0Like Read more
Computer Science

MessagePack Java Jackson Dataformat - Map 的序列化和反序列化

本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。 我们需要定义测试需要的 MAP,定义 Map 的方法你可以在下面的测试程序中找到。 /** * SerializationMap */ @Test public void testMessagePackSerializationMap() { byte[] bytes = new byte[0]; String uuid_a = UUID.randomUUID().toString(); String uuid_b = UUID.randomUUID().toString(); // Instantiate ObjectMapper for MessagePack ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); Map<String, MessageData> map = new HashMap<>(); MessageData messageData = new MessageData(); // Element A in MAP messageData.setUuid(UUID.randomUUID().toString()); messageData.setName("CWIKI.US - A"); map.put(uuid_a, messageData); // Element B in MAP messageData = new MessageData(); messageData.setUuid(UUID.randomUUID().toString()); messageData.setName("CWIKI.US - B"); map.put(uuid_b, messageData); try { // Serialize a Java object to byte array bytes = objectMapper.writeValueAsBytes(map); logger.debug("Length of Bytes: [{}]", bytes.length); // Deserialize the byte array to a MAP Map<String, MessageData> deserialized = objectMapper.readValue(bytes, new TypeReference<Map<String, MessageData>>() { }); logger.debug("Deserialized MAP Count: [{}]", deserialized.size()); logger.debug("MAP index 0: [{}]", deserialized.get(uuid_a).getName()); assertEquals("CWIKI.US - A", deserialized.get(uuid_a).getName()); } catch (JsonProcessingException ex) { logger.error("Serialize Error", ex); } catch (IOException e) { e.printStackTrace(); } } https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat  

2019年08月09日 0Comments 693Browse 0Like Read more
Computer Science

MessagePack Java Jackson Dataformat - 列表(List)的序列化和反序列化

在本测试代码中,我们定义了一个 POJO 类,名字为 MessageData,你可以访问下面的链接找到有关这个类的定义。 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/main/java/com/insight/demo/serialize/model/msgpack/MessageData.java 本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。 我们需要先定义一个对象的 List 列表。 /** * SerializationList */ @Test public void testMessagePackSerializationList() { byte[] bytes = new byte[0]; String uuid = UUID.randomUUID().toString(); // Instantiate ObjectMapper for MessagePack ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); List<MessageData> objList = MockDataUtils.getMessageDataList(9); try { // Serialize a Java object to byte array bytes = objectMapper.writeValueAsBytes(objList); logger.debug("Length of Bytes: [{}]", bytes.length); // Deserialize the byte array to a Java object // Deserialize the byte array to a List List<MessageData> deserialized = objectMapper.readValue(bytes, new TypeReference<List<MessageData>>() { }); logger.debug("Deserialized List Count: [{}]", deserialized.size()); logger.debug("List index 0: [{}]", deserialized.get(0).name); } catch (JsonProcessingException ex) { logger.error("Serialize Error", ex); } catch (IOException e) { e.printStackTrace(); } } https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

2019年08月08日 0Comments 710Browse 0Like Read more
Computer Science

MessagePack Java Jackson Dataformat - POJO 的序列化和反序列化

在本测试代码中,我们定义了一个 POJO 类,名字为 MessageData,你可以访问下面的链接找到有关这个类的定义。 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/main/java/com/insight/demo/serialize/model/msgpack/MessageData.java POJO 的序列化和反序列化 你仅仅需要对 MessagePackFactory 进行实例化,然后传递参数到 com.fasterxml.jackson.databind.ObjectMapper 的构造方法。 然后你就可以用与 jackson-databind 相同的方法使用 MessagePack 格式化数据。 本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。 /** * SerializationPOJO */ @Test public void testMessagePackSerializationPOJO() { byte[] bytes = new byte[0]; String uuid = UUID.randomUUID().toString(); // Instantiate ObjectMapper for MessagePack ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); MessageData pojo = new MessageData(); pojo.setUuid(uuid); pojo.setName("CWIKI.US"); try { // Serialize a Java object to byte array bytes = objectMapper.writeValueAsBytes(pojo); logger.debug("Length of Bytes: [{}]", bytes.length); // Deserialize the byte array to a Java object MessageData deserialized = objectMapper.readValue(bytes, MessageData.class); logger.debug("Deserialized Name: [{}]", deserialized.name); assertEquals("CWIKI.US", deserialized.name); } catch (JsonProcessingException ex) { logger.error("Serialize Error", ex); } catch (IOException e) { e.printStackTrace(); } } https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

2019年08月08日 0Comments 620Browse 0Like Read more
Computer Science

MessagePack Java Jackson Dataformat - 安装

中文标题【MessagePack 的 Jackson 数据格式】 本页面中的所有示例程序,请到代码库 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java 中下载进行测试。 Jackson 扩展库是一个易读取,同时是使用  MessagePack 创建的组件库,用于从 jackson-databind API 对数据进行编码。 这个组件扩展了标准的 Jackson streaming API (JsonFactory, JsonParser, JsonGenerator), 同时能够更加无缝的集成更加高级别的数据抽象(数据绑定,树模型和插件扩展)。 更多有关 Jackson-annotations 细节,请参考  https://github.com/FasterXML/jackson-annotations。 这个库针对默认 POJO的序列化/反序列化(serialization/deserialization)不能兼容  msgpack-java v0.6 或者早期的版本。 安装 Maven <dependency>   <groupId>org.msgpack</groupId>   <artifactId>jackson-dataformat-msgpack</artifactId>   <version>(version)</version> </dependency> Sbt libraryDependencies += "org.msgpack" % "jackson-dataformat-msgpack" % "(version)" Gradle repositories {     mavenCentral() } dependencies {     compile 'org.msgpack:jackson-dataformat-msgpack:(version)' }   https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

2019年08月08日 0Comments 567Browse 0Like Read more
Computer Science

MessagePack Java 0.6.X 动态类型

我们知道 Java 是一个静态类型的语言。通过输入 Value MessagePack能够实现动态的特性。 Value 有方法来检查自己的类型(isIntegerType(), isArrayType(), 等...),同时也转换为自己的类型 (asStringValue(), convert(Template))。 本代码可以在 https://github.com/cwiki-us-demo/messagepack-6-demo-java/blob/master/src/test/java/com/insight/demo/msgpack/MessagePack6DynamicTyping.java 中查看。 package com.insight.demo.msgpack; import org.junit.Test; import org.msgpack.MessagePack; import org.msgpack.type.Value; import org.msgpack.unpacker.Converter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import static org.msgpack.template.Templates.TString; import static org.msgpack.template.Templates.tList; /**  * MessagePack6Objects  *  * @author yhu  */ public class MessagePack6DynamicTyping {     final Logger logger = LoggerFactory.getLogger(MessagePack6DynamicTyping.class);     /**      * Test MessagePack6Objects      */     @Test     public void MessagePack6DynamicTyping() {         logger.debug("MessagePack6Objects for Objects");         // Create serialize objects.         List<String> src = new ArrayList<String>();         src.add("msgpack");         src.add("kumofs");         src.add("viver");         MessagePack msgpack = new MessagePack();                   try {             // Serialize             byte[] raw = msgpack.write(src);             // Deserialize directly using a template             List<String> dst1 = msgpack.read(raw, tList(TString));             // Or, Deserialze to Value then convert type.             Value dynamic = msgpack.read(raw);             List<String> dst2 = new Converter(dynamic).read(tList(TString));         } catch (Exception ex) {             logger.error("MessagePack Serialization And Deserialization error", ex);         }     } } https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X

2019年08月07日 0Comments 540Browse 0Like Read more
Computer Science

MessagePack Java 0.6.X 可选字段

你可添加一个新的字段来保持可用性。在新字段中使用 @Optional 注解。 @Message public static class MyMessage {     public String name;     public double version;        // new field     @Optional     public int flag = 0; } 如果你尝试反序列化老版本数据的话,可选字段将会被忽略。   https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X

2019年08月07日 0Comments 625Browse 0Like Read more
Computer Science

MessagePack Java 0.6.X 不使用注解(annotations)来序列化

如果你不能添加 @Message 到你的定义对象中但是你还是希望进行序列化。你可以使用 register 方法来在类中启用序列化对象。 如下的代码所示: MessagePack msgpack = new MessagePack(); msgpack.register(MyMessage2.class);   例如,如果 MyMessage2 类被包含到了外部的库中了。你没有办法比较容易的编辑源代码,添加 @Message 到源代码中。 register 方法能够允许为 MyMessage2 自动创建一个 serializer 和 deserializer 对。 你可以在执行方面后序列化对象 MyMessage2。   https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X

2019年08月06日 0Comments 586Browse 0Like Read more
12345
Archives
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,315)
    • Confluence (663)
    • Gradle (12)
  • U.S. (409)
  • 文化旅游 (142)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1