我有以下问题。我可以将事务状态设置为“开始、结束或正在进行”。我设置了这个,然后将我的 Transaction 对象序列化到服务器,服务器检索它。第一次(当事务处于启动模式时)工作起来就像一个魅力,但是当我重新发送对象时,这次是在“持续”模式下,服务器继续在“启动”模式下看到它。我已经在序列化之前的行和反序列化之后的行测试了代码,这肯定是问题所在。任何帮助将非常感激。相关代码片段如下:
序列化
if ((query instanceof Transaction) && !(trx.getTransactionState()==Consts.trx_start)) System.out.println("Not start");
oos.writeObject(query);
oos.flush();
反序列化
while (true) {
Object statement = null;
try {
statement = ois.readObject();
if ((statement instanceof Transaction) && !(((Transaction) statement).getTransactionState()==Consts.trx_start)) System.out.println("Not start 2");
handle_statement(statement, socket);
} catch (IOException e) {
和交易类:
public class Transaction extends Statement{
/**
*
*/
private static final long serialVersionUID = -2284996855537430822L;
Statement statement_list;
int trx_state;
/**
*
*/
public Transaction() {
trx_state = Consts.trx_start;;
}
/**
* @param statement
*/
public void setStatement(Statement statement ) {
statement_list = statement;
}
public void setTransactionState(int state) {
trx_state = state;
}
public int getTransactionState() {
return trx_state;
}
/**
* @return
*/
public Statement getStatement() {
return statement_list;
}
The 对象输出流 http://docs.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html缓存通过线路发送的实例(不一定是最好的设计)。但无论如何,你需要reset
如果您计划使用它来(重新)发送相同的对象实例,则输出流会在调用之间流动。
public void reset() 抛出 IOException
重置将忽略已经存在的任何对象的状态
写入流。状态被重置为
与新的 ObjectOutputStream 相同。流中的当前点是
标记为重置,因此相应的 ObjectInputStream 将被重置
在同一点上。先前写入流的对象不会
被称为已经在流中。他们将被写到
再次流。
另一个 SO 线程讨论这个同样的问题。 https://stackoverflow.com/questions/142317/sending-the-same-but-modifed-object-over-objectoutputstream
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)