【发布时间】:2015-01-22 00:16:00
【问题描述】:
作为一个小项目,我一直在尝试制作一个读取序列化 lambda(本地或从 FTP)并调用它们的运行函数作为测试的一部分,以在 Windows 中试验文件关联(即打开某些文件类型使用某个程序打开它们)等等,但无论我尝试什么,它似乎都无法正确反序列化。
lambda 是这样声明的
Runnable r = (Runnable & Serializable) () -> {
// blah blah
// made sure not to capture anything
};
并使用由 ObjectOutputStream 包装的 [n optional] BufferedOutputStream 包装的 FileOutputStream 进行序列化,没有问题。但是,当反序列化 [在不同的项目中] 时,它会失败,说它找不到包含序列化代码的封闭类。我尝试了各种方法,例如将它们包装在可序列化的类中(w/serialVersionUID = 0L 用于测试目的)或定义扩展可运行和可序列化的接口,但无济于事。
是的,我知道序列化 lambdas 并不是一个很好的做法(或者我们被告知),但我不确定如何将函数和子例程转换为可以存储为文件或存储在一个FTP。如果这根本不是正确的方法,请告诉。
哦,我正在使用最新版本的 Eclipse Luna。
编辑:
像这样反序列化
File f = new File(somePath);
FileInputStream fish = new FileInputStream(f);
BufferedInputStream bos = new BufferedInputStream(fish); // not really necessary
ObjectInputStream ois = new ObjectInputStream(bos);
Runnable r = (Runnable) ois.readObject();
ois.close();
r.run();
【问题讨论】:
-
等待您尝试序列化方法吗?
-
方法对象不可序列化。我说的是 Runnable lambda。
-
你能告诉我们你的序列化/反序列化代码吗?
-
对我来说看起来很可疑,但我会赞成,这个问题很有趣。
-
您是否尝试过使用 Oracle JDK?
标签: java serialization lambda java-8