簡體   English   中英

ObjectOutputStream無法寫我的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM