我们有一台服务器从CLI接收请求,并使用非常基本的POJO来存储在单个对象中传输的状态。这个对象最终通过网络使用OjbectStream服务到我们的服务器,服务器读取它并使用数据来处理请求。它按预期完美地工作。然而,当我今天打开POJO以扩展它时,我注意到它看起来像这样(由于我无法复制和粘贴而由内存编写)
class param {
private transient String input;
private transient String output;
public param(String input, String output){
this.input=input;
this.output=output;
}
public String getInput(){
return input;
}
public String getOutput(){
return output;
}
}
这个POJO如何运作?如果输入和输出字符串,它唯一的变量,都是瞬态的,那么当它被服务器从网络中读出时,我不应该得到一个空的输入和输出字符串,因此无法做任何事情?我知道它有效,我只是想不通它为什么
答案 0 :(得分:1)
这个POJO如何运作?
类似于该类还有writeObject
和readObject
方法,可以对这些字段进行序列化和反序列化。
如果输入和输出字符串(它具有的唯一变量)都是瞬态的,那么当它被服务器从网络中读出时,我不会得到空的输入和输出字符串,因此无法做任何事吗?
你应该得到null
,否则不是空字符串。
我知道它有效,但我无法弄清楚它为什么会这样做
很可能有你错过的代码。或者它没有使用Java序列化。其他序列化库可能会忽略transient
。