Java ProGuard在使用对象序列化的应用程序上的用法
我有一个应用程序,它使用SaveData类(使用ObjectOutputStream保存序列化数据)和一个LoadData类(使用ObjectInputStream加载数据)。我试着在这里寻找帮助,但有些事情根本没有意义。他们使用的是Java ProGuard在使用对象序列化的应用程序上的用法,java,proguard,serializable,Java,Proguard,Serializable,我有一个应用程序,它使用SaveData类(使用ObjectOutputStream保存序列化数据)和一个LoadData类(使用ObjectInputStream加载数据)。我试着在这里寻找帮助,但有些事情根本没有意义。他们使用的是私有void writeObject(java.io.ObjectOutputStream)代替void writeObject(java.lang.Object)和私有void readObject(java.io.ObjectInputStream)而不是公共对
私有void writeObject(java.io.ObjectOutputStream)
代替void writeObject(java.lang.Object)
和私有void readObject(java.io.ObjectInputStream)代码>而不是公共对象readObject()代码>。那是怎么回事?还有,为什么我需要包括这些方法?我有一个数据类,它有一个私有静态final long serialVersionUID
。我应该简单地说吗
-keepclassmembers数据实现java.io.Serializable{
静态最终长SerialVersionId;
}
?看一看。更具体地说,.那么,签名不是在.java
文件中使用它的方式?尽管如此,您可能会说类似于myObject=oostream.readObject()代码>其中oostream
是ObjectOutputStream
?或者这是一个我通常不处理的非常不同的readObject、writeObject(可能还有实现java.io.Serializable的任何类的一些幕后工作)readObject
和writeObject
方法是由ObjectOutputStream
在内部使用的,您不应该直接调用它们,因此,它们是私有的。它们允许您创建自己的自定义序列化格式,而不是(或除了)使用ObjectOutputStream
提供的默认格式。因此,即使Data
只有一个serialVersionUID、get和set方法,您仍然必须包含readObject
、writeObject
的签名,以及其他序列化方法?否,ObjectOutputStream
如果未指定,则仅使用默认方法(有关默认方法,请参阅)。序列化对象时发生错误的唯一方式是尝试序列化不可序列化的内容。