[英]Why can't I send Serializable Object with ObjectOutputStream in Java?
[英]ObjectOutputStream can't write my object
我正在使用套接字制作一個組聊天程序,但是無法將我的Message對象寫入套接字objectOutputStream中。 服務器端objectInputStream找不到任何內容(可用= 0)。 我已經嘗試沖洗,但是沒用。 請幫助家伙。
enum MessageStatus implements Serializable {Mess, Offline};
public class Message implements Serializable{
String mess;
String senderName;
int senderID;
MessageStatus type;
public Message(String mess, int SenderID, String SenderName) {
this.mess = mess;
this.senderID = SenderID;
this.senderName = SenderName;
}
我試圖這樣寫:
Message msg = new Message(txtChat.getText().trim(), user.id, user.name);
msg.type = MessageStatus.Mess;
try {
user.Output.writeObject(msg);
user.Output.flush();
我的套接字沒問題,我嘗試編寫一些字符串或整數,但它可以工作,但我的對象不行。 我試圖將其作為服務器端套接字對象inputstream中的消息或對象,但是它拋出了.ClassNotFoundException我認為我的對象沒有被寫入套接字
不要依賴available()
來了解是否確實要加載某些東西,它僅返回可以讀取而不會阻塞的字節數。
如果執行此操作,請使用您的代碼:
Message msg = new Message("Hello", 123, "world");
System.out.printf("Before serialization = %s%n", msg);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream);
oos.writeObject(msg);
oos.flush();
oos.close();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream ois = new ObjectInputStream(byteArrayInputStream);
System.out.printf("available = %d%n", ois.available());
Message message = (Message) ois.readObject();
System.out.printf("After deserialization = %s%n", message);
ois.close();
輸出為:
Before serialization = Message{mess='Hello', senderName='world', senderID=123, type=Mess}
available = 0
After deserialization = Message{mess='Hello', senderName='world', senderID=123, type=Mess}
我可以看到該消息已正確序列化和反序列化,但仍然available
返回0
,這是一個示例,證明您不能信任available
滿足此需求的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.