0

我有一个实现 Externalizable 的类,它包含三个对象和这三种对象类型之一的列表。我假设您将简单地在子类中实现可外部化,然后为成员对象定义外部读写,但是是否也可以包含列表,如果可以的话如何?

public class AuthSuccessPacket extends Packet implements Externalizable {

public static final long serialVersionUID = 10003L;
Contact contact;
Network network;
Account account;
List<Contact> contacts;

public AuthSuccessPacket(){
    super(Type.AUTH_SUCCESS);
}

public AuthSuccessPacket(Contact contact, Network network, Account account, List<Contact> contacts){
    super(Type.AUTH_SUCCESS);
    this.contact = contact;
    this.network = network;
    this.account = account;
    this.contacts = contacts;
}

@Override
public void writeExternal(ObjectOutput out) {
  out.writeObject(account);
  out.writeObject(network);
  out.writeObject(contact);
// ??? write list
}

@Override
public void readExternal(ObjectInput in)  {
}
contact = (Contact) in.readObject();
network = (Network) in.readObject();
account = (Account) in.readObject();
// ??? read list
}
4

1 回答 1

1

我会尝试类似的东西:

@Override
public void writeExternal(ObjectOutput out) throws IOException {
  out.writeObject(account);
  out.writeObject(network);
  out.writeObject(contact);
  // ??? write list
  out.writeInt(contacts.size());
  for (Contact cntct : contacts) {
    out.writeObject(cntct);
  }
}

@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {

  contact = (Contact) in.readObject();
  network = (Network) in.readObject();
  account = (Account) in.readObject();
  // ??? read list
  contacts = new ArrayList<>();
  int contactsNo = (int) in.readInt();
  for (int i = 0; i < contactsNo; i++) {
    Contact cntct = (Contact) in.readObject();
    contacts.add(cntct);
  }
}
于 2020-07-03T16:17:50.240 回答