作为一个小项目,我一直在尝试制作一个东西,它可以读取序列化的lambda(本地或来自FTP),并将它们的运行函数调用作为测试的一部分,以实验Windows中的文件关联(即打开某些文件类型会使用特定的程序)等等。但是无论我尝试什么,它似乎从未正确反序列化。
lambda表达式声明如下:
Runnable r = (Runnable & Serializable) () -> {
// blah blah
// made sure not to capture anything
};
使用FileOutputStream包装的BufferedOutputStream,再包装ObjectOutputStream进行序列化没有问题。但是,在反序列化时(在另一个项目中),它失败了,说找不到包含其序列化代码的封闭类。我尝试过各种方法,如将它们包装在可序列化类中(测试目的为serialVersionUID = 0L)或定义一个实现Runnable和Serializable接口的接口,但都无济于事。
是的,我知道序列化lambda并不是一个好的做法(或者我们被告知这样做),但我不确定如何将函数和子例程转换为可以存储为文件或在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();