当前位置: 代码迷 >> J2SE >> java serializable 有没有序列化变量名?解决办法
  详细解决方案

java serializable 有没有序列化变量名?解决办法

热度:7575   发布时间:2013-02-25 00:00:00.0
java serializable 有没有序列化变量名?
java的标准序列化方法有没有把对象的变量名也序列化到数据中?
我感觉好像把变量名也写到数据中了。
如果是,那还得想办法缩写变量名才行?

其他序列化工具怎么样?
------最佳解决方案--------------------------------------------------------
一般来说,网络传递的话不建议用Object打成序列化进行传递
既然是走SOCKET了,那还是以协议传输来的比较好,还可以脱离语言范围,兼容其他语言的客户端
------其他解决方案--------------------------------------------------------
可以自己定义序列化格式。

实际上,应该自己定义序列化格式。

方法是在你 implements Serializable 的类里实现下面两个方法:

private void writeObject(ObjectOutputStream s)
private void readObject(ObjectInputStream s)

一个是写,一个是读,
ObjectOutputStream 会去调用这两个方法。
------其他解决方案--------------------------------------------------------
引用:
引用:可以自己定义序列化格式。

实际上,应该自己定义序列化格式。

方法是在你 implements Serializable 的类里实现下面两个方法:

private void writeObject(ObjectOutputStream s)
private void readObject(ObjectInputS……


关于序列化的陷阱和最佳实践,可以参考 <Effective Java 2> 的 Item 74 - 78
------其他解决方案--------------------------------------------------------
打开序列化后的文件看了一下,真把变量名给序列化了。(也没压缩)
这不是逼着我缩写变量名吗?

诸位高人,有谁知道好的序列化工具(占空间小,速度快)
------其他解决方案--------------------------------------------------------
寻求高手!

有没有人知道好的序列化工具?(至少不要把变量名也序列化了)
------其他解决方案--------------------------------------------------------
实在没人知道,也请回复一个,我好结贴
------其他解决方案--------------------------------------------------------
我说...你把序列化当神马在用?加密工具???
------其他解决方案--------------------------------------------------------
引用:
我说...你把序列化当神马在用?加密工具???


网络传输呀。
因为加了变量名,比数据本身大了3倍,这不是本末倒置吗?
------其他解决方案--------------------------------------------------------
最不爽的是逼着我缩写变量名。(用C++的时候都没这习惯,这不是倒退20年了吗)
------其他解决方案--------------------------------------------------------
算了,自己手动编码序列化吧。
话说,java作为一个为菜鸟程序员设计的语言,性能本来就不高。
用java本来别想追求神马性能。
------其他解决方案--------------------------------------------------------
直接自己定义声明一个字节序列发送过去,会比封装成一个类发送过去快,毕竟,封装成一个类的过程也多了很多开销
------其他解决方案--------------------------------------------------------
阿里巴巴开源的fastjson含有序列化工具,说是比java自带的序列化效率高,可以看看
------其他解决方案--------------------------------------------------------
还有http://www.oschina.net/p/protocol+buffers等
------其他解决方案--------------------------------------------------------
引用:
直接自己定义声明一个字节序列发送过去,会比封装成一个类发送过去快,毕竟,封装成一个类的过程也多了很多开销


是呀,只好自己编码、解码了。
不过java里好像还没有memcopy之类的东西
------其他解决方案--------------------------------------------------------
引用:
还有http://www.oschina.net/p/protocol+buffers等


用protocol buffer比自己编码还麻烦,鸡肋
------其他解决方案--------------------------------------------------------
引用:
可以自己定义序列化格式。

实际上,应该自己定义序列化格式。

方法是在你 implements Serializable 的类里实现下面两个方法:

private void writeObject(ObjectOutputStream s)
private void readObject(ObjectInputStream s)

一个是写,一个是读……


应该是 “ObjectOutputStream 和 ObjectInputStream 会分别去调用这两个方法”。
  相关解决方案