У меня есть сериализуемый класс, который содержит список несериализуемых объектов. Поэтому я пометил этот список как временный и реализовал readObject
и writeObject
в своем классе. Но когда я сериализую и десериализую свой объект, методы readObject
и writeObject
не вводятся (я доказал это с помощью sout). Не знаю, почему это не работает. Вот мой код.
Мой сериализуемый класс:
public class Product implements Serializable
{
private String reference;
private String name;
private int stock;
private double defaultPrice;
private transient List<Sale> sales = new ArrayList<>();
public Product(String reference, String name, int stock, double defaultPrice)
{
this.reference = reference;
this.name = name;
this.stock = stock;
this.defaultPrice = defaultPrice;
}
public Product() {}
public void addSale(Date from, Date to, int minQuantity, int maxQuantity, double specialPrice)
{
sales.add(new Sale(from, to, minQuantity, maxQuantity, specialPrice));
}
/*public double findPrice(Date date, int quantity)
{
}*/
public List<Sale> getSales()
{
return sales;
}
void writeObject(ObjectOutputStream oos) throws IOException
{
System.out.println("ENTRO AQUI");
oos.defaultWriteObject();
oos.writeInt( sales.size() );
for(Sale sale: this.sales)
{
oos.writeObject( sale.getFrom());
oos.writeObject( sale.getTo() );
oos.writeInt( sale.getMinQuantity() );
oos.writeInt( sale.getMaxQuantity() );
oos.writeDouble( sale.getSpecialPrice() );
}
}
public void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException
{
ois.defaultReadObject();
int salesSize = ois.readInt();
for(int i = 0; i < salesSize; ++i)
{
Date from = (Date) ois.readObject();
Date to = (Date) ois.readObject();;
int minQuantity = (int) ois.readObject();
int maxQuantity = (int) ois.readObject();
double specialPrice = (double) ois.readObject();
Sale sale = new Sale(from, to, minQuantity, maxQuantity, specialPrice);
this.sales.add(sale);
}
}
Я не публиковал сеттеры и геттеры, потому что не думаю, что они актуальны.
Мой не сериализуемый класс:
public class Sale
{
private Date from;
private Date to;
private int minQuantity;
private int maxQuantity;
private double specialPrice;
public Sale(Date from, Date to, int minQuantity, int maxQuantity, double specialPrice)
{
this.from = from;
this.to = to;
this.minQuantity = minQuantity;
this.maxQuantity = maxQuantity;
this.specialPrice = specialPrice;
}
public Sale() {
}
Кстати, это мой читатель:
public class BusinessBinaryReader
{
public Business read(File file) throws IOException, ClassNotFoundException
{
try(FileInputStream fis = new FileInputStream( file );
BufferedInputStream bis = new BufferedInputStream( fis );
ObjectInputStream ois = new ObjectInputStream( bis )
)
{
return (Business) ois.readObject();
}
}
}
И мой писатель:
public class BusinessBinaryWriter
{
public void write(File file, Business business) throws IOException
{
try(FileOutputStream fos = new FileOutputStream( file );
BufferedOutputStream bos = new BufferedOutputStream( fos );
ObjectOutputStream oos = new ObjectOutputStream( bos )
)
{
oos.writeObject(business);
oos.flush();
}
}
}