简体   繁体   English

如何将Httpclient的响应object序列化和反序列化为字节数组

[英]How to serialize & deserialize response object of Httpclient into byte array

I want to serialize and deserialize http response object of Apache, okhttp client etc.我想对Apache、okhttp客户端等的http响应object进行序列化和反序列化。

I am unable to use ->我无法使用->

  1. Java Serializable as response objects of both the clients don't implement serializable interface. Java 可序列化作为两个客户端的响应对象都没有实现可序列化接口。
  2. Jackson because response object doesn't have no-arg constructor hence shows below error while deserialization. Jackson因为响应 object 没有无参数构造函数,因此在反序列化时显示以下错误。
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.example.Student` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
  1. Gson due to out of memory error: Gson由于出 memory 错误:

(ApacheClient is used below) (下面使用ApacheClient)

Serialization:序列化:

       Gson gson = new GsonBuilder().setPrettyPrinting().create();
       ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
       OutputStreamWriter writer = new OutputStreamWriter(outputStream);
       gson.toJson(httpResponse, writer);
       writer.flush();

Deserialization:反序列化:

       byte[] data = outputStream.toByteArray();
       ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
       InputStreamReader reader = new InputStreamReader(inputStream);
       HttpResponse res = gson.fromJson(reader, HttpResponse.class);
       System.out.println("HttpResponse-> " + EntityUtils.toString(res.getEntity()));

Error:错误:


Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3332)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
    at java.lang.StringBuffer.append(StringBuffer.java:276)
    at java.io.StringWriter.write(StringWriter.java:101)
    at com.google.gson.stream.JsonWriter.newline(JsonWriter.java:602)
    at com.google.gson.stream.JsonWriter.beforeValue(JsonWriter.java:646)
    at com.google.gson.stream.JsonWriter.value(JsonWriter.java:532)
    at com.google.gson.internal.bind.TypeAdapters$5.write(TypeAdapters.java:189)
    at com.google.gson.internal.bind.TypeAdapters$5.write(TypeAdapters.java:173)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:95)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)


  • The first question is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.example.Student` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) shows that org.example.Student class should declared a default constructor. The first question is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.example.Student` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)表明org.example.Student class 应该声明一个默认构造函数。 So what is the default constructor?那么什么是默认构造函数呢? Okay, it's just a non-args constructer.好的,它只是一个非参数构造函数。

  • Java Memory Analyze to analysis the JVM memory usage. Java Memory 分析分析JVM ZCD69B4957F06CD818D7BF3DZ619的用法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 Jackson 和包装器 object 反序列化/序列化字节数组 - how to deserialize / serialize byte array using Jackson and wrapper object 如何将内部没有 Serializable 字段的 java 对象序列化为字节数组并反序列化该数组以获取原始对象 - How to serialize a java object with not Serializable fields inside it into byte array and deserialize the array to get the original object 通过网络和字节数组序列化/反序列化Java对象 - Serialize/Deserialize Java object through network and byte array 将Integer集合序列化为字节数组,然后反序列化 - Serialize Integer collection to byte array and deserialize it back 如何序列化/反序列化arrayList(Object) - how to serialize/deserialize arrayList(Object) 如何序列化/反序列化 object 到 Map - How to serialize/deserialize object to Map 当我有一个黑盒子转换为/从字节数组转换时,如何在Java中序列化和反序列化? - How do I serialize and deserialize in Java when I have a black box to convert to/from a byte array? Jackson:用一个数组字段序列化/反序列化 object - Jackson: serialize / deserialize object with one array field Java:如何将对象序列化为字节数组,且输出字节越少越好? - Java: how to serialize object into byte array with as few output bytes as possible? 如何在Java中使用紧凑字节将对象序列化为字节数组 - How to Serialize object to byte array with compact bytes in java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM