我对阅读有效的Java表示怀疑。如果这是一个简单而直截了当的疑问,我很抱歉。因此,在项目74 --明智地实现可序列化的中,他说即使在您的类上使用私有和包私有字段实现了良好的信息隐藏之后,它也很容易失效吗?不管我在过去读到的是什么,所有的序列化都是将对象转换为Byte表单,在反序列化之后,相同的对象被保留回来。如何在此过程中丢失隐藏的数据?
发布于 2010-11-12 16:52:16
您可以使用序列化和反序列化访问对象内部状态的值。
通过序列化一个对象,您可能能够读取您不应该读取的私有字段的值。相反,如果您创建一个精心编制的字节数组,并将其反序列化为一个实例,则可能可以在非法状态下初始化它。
发布于 2013-02-02 13:02:33
@指出了OOP环境下的数据隐藏问题。
但是Serialization.还有另外一个方面
您可以通过网络发送序列化文件,这样就可以窥视它,并且可以很容易地破坏本应是私有的东西。
下面是我序列化的Bean类的内容(使用默认技术)。我可以通过在文本编辑器中打开序列化文件来查看内容。
’ sr SerializationPractice1 I ageL extrat Ljava/lang/String;L nameq ~ xp
pt SidKumarq ~ x
现在,您可以很容易地在不了解类的情况下找到以下内容:
类的SerializationPractice1
这些事情你可以肯定地注意到,其他的细节还不太清楚。以上信息是正确的。
发布于 2015-02-24 07:08:10
我确实相信,序列化有可能将私人数据暴露给外部世界。这就是外部化(使用Externalizable类型实例非常有用)的地方。通过实现可扩展接口的writeExternal(.)方法开发人员完全控制序列化过程,而不是完全依赖默认序列化运行时实现。下面是我的想法的伪代码(我将忽略实际的方法签名,因为它仅仅是一个旨在跨越更广泛的想法的伪代码):
class SensitiveData implemets java.io.Externalizable{
int sensitiveInteger;
writeExternal (OutputData outputData){
//encrypt sensitiveInteger here
//serialize the sensitiveInteger which is now encrypted to any persistent store
outputData.writeInt(sensitiveInteger);
//do other processing
}
}事实上,为什么只是加密,如果我们希望在要序列化的实例‘大’的某些情况下,我们很可能希望将序列化的字节压缩到某个持久存储。
https://stackoverflow.com/questions/4166942
复制相似问题