为什么我在run方法中接收java.io.OptionalDataException
?
ObjectInputStream读取项目&用户几次,然后它与OptionalDataException
崩溃。我认为它与EOFException
有关。
当新套接字创建时,它打印一条消息,打印objectInputStream的值,它也打印消息。
堆栈跟踪+消息
创建新套接字
创建新套接字
创建新套接字
这是ObjectInputStream :java.io.ObjectInputStream@1430b5c
以下是消息:REA:ITEM:
这是ObjectInputStream :java.io.ObjectInputStream@1decdec <
以下是消息:添加:ITEM:
创建新套接字
创建新套接字
这是ObjectInputStream :java.io.ObjectInputStream@b2fd8f
以下是消息:REA:ITEM:
创建新套接字
java.io.OptionalDataException
自愿
自愿
自愿
创建新套接字
这是ObjectInputStream :java.io.ObjectInputStream@1c39a2d
以下是消息:REA:USER:
这是ObjectInputStream :java.io.ObjectInputStream@13bad12
下面是消息:ADD:USER:
创建新套接字
创建新套接字
这是ObjectInputStream :java.io.ObjectInputStream@eb7859
以下是消息:REA:USER:
java.io.OptionalDataException
自愿
自愿
自愿
public void run() {
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
User user = null;
Item item = null;
String upc = null;
String username = null;
// This is the line where the error occurs
String message = (String) objectInputStream.readObject();
switch (message) {
case "REA:ITEM:": upc = (String) objectInputStream.readObject();
item = inventoryFileManager.readItem(upc);
objectOutputStream.writeObject(item);
objectOutputStream.flush();
break;
case "REA:USER:": username = (String) objectInputStream.readObject();
user = userFileManager.readUser(username);
objectOutputStream.writeObject(user);
objectOutputStream.flush();
break;
case "REM:ITEM:": upc = (String) objectInputStream.readObject();
inventoryFileManager.removeItem(upc);
break;
case "REM:USER:": username = (String) objectInputStream.readObject();
userFileManager.removeUser(username);
break;
case "ADD:ITEM:": item = (Item) objectInputStream.readObject();
if (item != null) {
inventoryFileManager.addItem(item);
}
break;
case "ADD:USER:": user = (User) objectInputStream.readObject();
if (user != null) {
userFileManager.addUser(user);
}
break;
case "UPD:ITEM:": item = (Item) objectInputStream.readObject();
inventoryFileManager.updateItem(item);
break;
case "UPD:USER:": user = (User) objectInputStream.readObject();
userFileManager.updateUser(user);
break;
case "ALL:ITEM:": objectOutputStream.writeObject(inventoryFileManager.readAllItems());
objectOutputStream.flush();
break;
case "ALL:USER:": objectOutputStream.writeObject(userFileManager.readAllUsers());
objectOutputStream.flush();
}
objectOutputStream.close();
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (PointOfSaleException e) {
e.printStackTrace();
}
}
发布于 2012-05-07 03:55:01
javadoc对异常的解释如下:
异常,指示由于未读原语数据或流中属于序列化对象的数据的结束而导致对象读取操作失败。在以下两种情况下可能引发此异常:
简而言之,写入套接字的内容与代码试图读取的内容不匹配。要想弄清这一点,你需要:
eof
和length
的值,然后,将您的代码与编写对象的代码进行比较,并(使用上面的证据)找出不匹配的原因。
https://stackoverflow.com/questions/10476056
复制相似问题