Java程序使用BigInteger
中的writeObject
方法将ObjectOutputStream
序列化到文件中。
我可以在C#中反序列化吗?我尝试使用java.math
的{{1}}和java.io
类,但我得到了一个例外:
InvalidClassException 该类与cl = java.lang.Number的持久对象的类不匹配:__SUID = -8742448824652078965,getSUID(cl)= 3166984097235214156
有什么想法吗?
答案 0 :(得分:1)
您是否可以控制Java的序列化步骤?
如果是这样,我建议将字节数组序列化为二进制或base64,并从序列化结构中读取字节数组。
然后您可以将字节数组传递给System.Numerics.BigInteger
构造函数。
答案 1 :(得分:1)
如果你不介意丑陋的黑客攻击:我会说最简单的(尽管不是最有效的)方法就是在Java端将其写成ASCII字符串,并在C#端解析该字符串,而不是使用二进制de /序列化。
答案 2 :(得分:0)
我建议你不要使用序列化,因为BigInteger
的两个版本不兼容 - 它们有不同的版本ID。
您应该以其他方式编写对象,可能使用BigInteger.toByteArray
阅读此this question about serialization也可能对您有所了解