Serialize a Java object to Java code?

僤鯓⒐⒋嵵緔 提交于 2019-11-30 12:47:21

I implemented this functionality in a new github project. You can find the project here:

https://github.com/ManuelB/java-bean-to-code-serializer

The project does not have any external dependencies except junit.

Currently it is not supporting arrays for serialization yet. Nevertheless there is already a lot of functionalities:

        Object2CodeObjectOutputStream object2CodeObjectOutputStream = new Object2CodeObjectOutputStream(
            byteArrayOutputStream);
        object2CodeObjectOutputStream.writeObject(<your-java-bean>);
        System.out.println(
                byteArrayOutputStream.toString());

You can achieve custom serialization of your objects. You have to implement two methods in your class with the exact signature:

private void writeObject(ObjectOutputStream oos)
{
    //write your serialization code here
}


private void readObject(ObjectInputStream ois)
{
    //write your de-serialization code here
}

However the amount of flexibility that you are seeking is very doubtful.

Could you use Clojure instead and integrate it with your Java code? Clojure is homoiconic - its data is identical to its code, so you can do things like this very easily.

Maps are a basic datatype in Clojure.

The pre-release of Long Term Persistence (java.beans.Encoder and friends) had both an XMLEncoder and a Java encoder. You can probably still download it somewhere.

I had a similar problem recently and the little framework testrecorder evolved from it. It does also support objects not complying to the Java Bean Conventions. Your example be serializable like this:

Map<String,Integer> m = new HashMap<String,Integer>();
m.put("bar",new Integer(21));

CodeSerializer codeSerializer = new CodeSerializer();
System.out.println(codeSerializer.serialize(m)); // of course you can put this string to a file output stream

and the output would be:

 HashMap map1 = new LinkedHashMap<>();
 map1.put("foo", 21);

One may call serialize(Type, Object) to make map1 a more generic Type (e.g. Map or Map<String, Integer>).

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!