【问题标题】:Overriding methods in class implementing Serializable实现 Serializable 的类中的重写方法
【发布时间】:2013-02-21 05:53:56
【问题描述】:

我正在尝试通过蓝牙在 Android 上创建分布式处理系统,因此我创建了一个实现 Serializable 的类,并创建了一个方法来序列化和反序列化该对象,以便我可以将其作为 ByteArray 发送。问题是我需要每个对象都有不同的代码在其他设备上运行。我想过重写一个方法,然后在另一台设备上运行该方法,但是当我这样做时,我得到了一个 NotSerializableException。有没有办法解决这个问题?或者如果没有,是否有另一种方法可以发送不同的代码以在其他设备上执行?

【问题讨论】:

  • 我说得对吗,您要编写一个从其他设备接收代码片段的应用程序,并且代码应该是任意的?如果是这样,请先研究安全概念...
  • 是的,我会的,但现在你能帮助解决这个具体问题吗?
  • 我不太确定 Android 框架是否会支持这一点。但从技术上讲,你可能想看看这个:stackoverflow.com/questions/7980133/…
  • 另外,安全概念是什么意思?
  • 如果你启动并运行它,那么有人会对你的应用程序进行逆向工程并使用它将任意代码注入其他设备,然后将在上下文中运行您的应用程序。

标签: android bluetooth bytearray serializable notserializableexception


【解决方案1】:

默认的序列化机制旨在提供一种方法来传输对象的状态而不是派生对象的类的实际逻辑。因此,Methods 中包含的代码不是(至少在默认情况下)可序列化的。

解决方案

您可以采用多种方法和/或策略来实现或至少接近您所需的结果;底线是服务器将需要您希望执行的类文件的副本:

动态方法:

您可以将“类”或完整的 jar 作为标准文件动态发送到服务器,然后使用序列化发送您希望从客户端调用的方法的详细信息(即名称、签名等)。

静态方法:

将应用程序 jar 的副本放在服务器的类路径中,作为构建过程的一部分。

当然你也可以实现Externalizable Interface 来定义你自己的序列化机制和语义。如果您需要有关此方法或我概述的任何其他方法的更多信息,请告诉我。

【讨论】:

    猜你喜欢
    • 2011-05-28
    • 2013-02-26
    • 2013-06-27
    • 1970-01-01
    • 2019-01-24
    • 2018-04-29
    • 1970-01-01
    • 2015-01-27
    • 2015-11-27
    相关资源
    最近更新 更多