Tag:

将Stream转换为String并返回…我们缺less什么?

我想序列化对象到string,并返回。 我们使用protobuf-net将一个对象转换成Stream并返回,成功。 但是,串stream和返回…不是那么成功。 在通过StreamToString和StringToStream ,新的Stream不会被protobuf-net反序列化; 它会引发一个Arithmetic Operation resulted in an Overflowexception的Arithmetic Operation resulted in an Overflow 。 如果我们反序列化原始stream,它就可以工作。 我们的方法: public static string StreamToString(Stream stream) { stream.Position = 0; using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { return reader.ReadToEnd(); } } public static Stream StringToStream(string src) { byte[] byteArray = Encoding.UTF8.GetBytes(src); return new MemoryStream(byteArray); } 我们的示例代码使用这两个: […]

高性能实体序列化:BSON vs MessagePack(vs JSON)

最近我发现了MessagePack ,它是Google 协议缓冲区和JSON的另一种二进制序列化格式。 还有MongoDB用来存储数据的BSON序列化格式。 有人能详细说明BSON与MessagePack的区别和优缺点吗? 只是为了完成性能二进制序列化格式的列表:还有Gobs 将成为谷歌的协议缓冲区的继任者 。 然而,与所有其他提及的格式相比,这些格式不是语言不可知的,依靠Go的内置reflection ,至less在Go语言之外还有Gobs库。

如何序列化包含BufferedImages的对象

我正在尝试在java中创build一个简单的图像编辑程序。 我创build了一个ImageCanvas对象,其中包含有关正在编辑的图像的所有信息(一些基本属性,应用的效果列表, BufferedImage图层列表等),我想要一个简单的方法将其保存到磁盘,可以稍后再打开。 我认为使用Java的defizable Serializable接口可能正是我所期待的,我可以将整个对象写入文件,并在以后再次读回到内存中。 然而, ImageCanvas包含一个ArrayList<BufferedImage> ,并且BufferedImage不是可序列化的(其他的都是)。 我知道有可能重写writeObject()和readObject()方法,但我从来没有这样做,我想知道是否有任何简单的方法让Java序列化的一切,并有一些自定义的方式来读/写BufferedImage到磁盘? 或者还有其他方法可以轻松将整个ImageCanvas对象写入磁盘,我忽略了吗? 最终,我可能会实现自己的自定义图像文件types,但现在我想要一个快速简单的方法来临时保存文件,而我正在testing( ImageCanvas类会改变很多,所以我不想保持更新我的自定义文件types之前,我已经敲定)。

Java序列化 – java.io.InvalidClassException本地类不兼容

我有一个公共类,实现Serializable,由其他多个类扩展。 只有那些以前的序列化的子类 – 从来没有超级类。 超类定义了一个serialVersionUID。 我不知道它是否重要,但它不是标记为私人的,而是它只是默认的保护 – 你可能会说它是包保护 static final long serialVersionUID = -7588980448693010399L; 超类,也没有任何子类,但实现了readObject或writeObject,并且没有一个子类具有明确定义的serialVersionUID。 我想在超类中定义的就足够了。 尽pipe如此,直到一个新的实例variablesList / ArrayList和一个新的方法被添加到超类中,并且一些私有的实例variables被添加到了它的一个子类中。 现在当试图回读以前的序列化对象时,抛出了一个exception。 一个类似于这样的: com.SomeCompany.SomeSubClass; local class incompatible: stream classdesc serialVersionUID = 1597316331807173261, local class serialVersionUID = -3344057582987646196 我假设这是因为默认的serialVersionUID,因为我没有在任何一个子类中声明,因为超类和一个子类的变化,现在已经改变了。 如何摆脱这种困境的build议将不胜感激。 我假设我需要实现readObject和writeObject,但除了调用defaultReadObject()和defaultWriteObject(),我不完全确定我需要做什么。 我也不知道是否需要将serialVerisonUID添加到所有子类,或者如果readObject和writeObject需要由每个子类实现,或者如果我可以只在一个超类中实现它们一次。

序列化和反序列化.NET对象的最快方法

我正在寻找序列化和反序列化.NET对象的最快方法。 这是我到目前为止: public class TD { public List<CT> CTs { get; set; } public List<TE> TEs { get; set; } public string Code { get; set; } public string Message { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public static string Serialize(List<TD> tData) { var […]

.NET NewtonSoft JSON反序列化映射到不同的属性名称

我有以下JSONstring是从外部方收到的。 { "team":[ { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"home", "score":"22", "team_id":"500" } }, { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"away", "score":"30", "team_id":"600" } } ] } 我的映射类: public class Attributes { public string eighty_min_score { get; set; } public string home_or_away { get; set; } public string score { get; set; } public string team_id { get; set; […]