У меня есть класс с именем Parameters, который реализует Serializable.Но когда я использую writeObject (p), я получил сообщение об ошибке.Я проверил статус р.Это говорит, что это уже Сериализовано.
package Server.Interface;
import java.util.*;
import java.io.Serializable;
public class Parameters implements Serializable{
private String command;
private String location;
private ArrayList<Integer> numbers;
public Parameters(String command, String location,ArrayList<Integer> numbers) {
this.command = command;
this.location = location;
this.numbers = numbers;
}
public String getCommend() {
return command;
}
public void setCommend(String c) {
this.command = c;
}
public String getLocation() {
return location;
}
public void setNumbers(ArrayList<Integer> numbers) {
this.numbers = numbers;
}
}
Код клиента:
public void sendMessage(Parameters p) {
try {
if(p instanceof Serializable){
System.out.println("can be serialized");
}
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(p);
InputStream is=socket.getInputStream();
int attempts = 0;
while(is.available() == 0 && attempts < 1000)
{
System.out.println(attempts);
attempts++;
try {
Thread.sleep(10);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("============================");
BufferedReader br=new BufferedReader(new InputStreamReader(is));
System.out.println("============================");
String info=null;
while((info=br.readLine())!=null&&info.length()>0){
System.out.println(info);
break;
}
}
catch (IOException e) {
System.out.println("IOError");
e.printStackTrace();
}
}
Это сообщение:
can be serialized
IOError
java.io.NotSerializableException: Client.TCPClient
В нем четко сказано, что объект сериализован.Но writeObject (p) не работает.Я также попытался установить для массива p значение null, и оно прошло.Но ArrayList сериализуем по умолчанию, верно?Это не должно влиять на сериализацию.