InputStream ima metodu reset koja služi baš za to što tebi treba.
Pored punjenja memorije postoji još jedan problem na koji treba obratiti pažnju. Object input/output stream za keširanje objekata koristi hash mapu, a to znači da poredi objekte korišćenjem metoda hashCode i equals.
Evo jednog primera, ukoliko imaš sledeću klasu
Code:
public class Person {
private Integer id;
private String name;
@Override
public int hashCode() {
return (id == null) ? 0 : id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
Poređenje Person-a se obavlja korišćenjem njihovi id-jeva. Ukoliko napraviš jednu instancu Person-a i pošalješ je kroz stream ta instanca će biti iskeširana. Ukoliko tom Person-u promeniš "name" i ponovo pošalješ ceo objekat, na output strani će se pojaviti stara, keširana instanca bez promenjene vrednosti imena.