まず、StreamCorruptedExceptionsに関していくつか質問があることは知っていますが、「無効なタイプコード:01」についてはほとんど質問がありません。
ローカルサーバーに接続されたローカルクライアントがあります。クライアントは、シリアル化可能な「Task_Data」オブジェクトをサーバーに送信しようとします。私が送信するために使用するコードは(クラッターを削除して):
oos = new ObjectOutputStream(clientSocket.getOutputStream());
Task_Data task = new Task_Data();
task.setCheckMale(true);
task.setCheckAdult(true);
task.setAdditionalInfo("testing");
task.setTakeNotes(true);
task.setTakePhoto(true);
oos.writeObject(task);
oos.flush();
今、受信側(サーバー)に私は持っています:
Task_Data task = (Task_Data) ois.readObject();
System.out.println(task.getAdditionalInfo());
Eclipseはこのエラーをスローします:java.io.StreamCorruptedException:無効なタイプコード:01
奇妙なのは、UTFのような「プリミティブ」タイプの送信が問題なく機能することです。
おそらく原因は私のシリアル化にあり、Task_Dataクラスは次のとおりです。
public class Task_Data implements Serializable {
private static final long serialVersionUID = -226273890693695870L;
private boolean checkMale = true;
private boolean checkAdult = true;
private boolean takePhoto = true;
private boolean takeNotes = true;
private String additionalInfo = null;
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.writeBoolean(checkMale);
out.writeBoolean(checkAdult);
out.writeBoolean(takePhoto);
out.writeBoolean(takeNotes);
out.writeUTF(additionalInfo);
}
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
checkMale = in.readBoolean();
checkAdult = in.readBoolean();
takePhoto = in.readBoolean();
takeNotes = in.readBoolean();
additionalInfo = in.readUTF();
}