[ glamoc @ 30.08.2009. 09:05 ] @
Pisem program koji za mreznu komunikaciju koristi sockete,i desava mi se da u jenom tremutku dodje do OutOfMemoryException-a.
Do ovoga dolazi jer se podatci koji se salju preko streamova kesiraju podatke i da bi ih periodicno trebalo prazniti.Problem je to sto ja ne znam kako da ispraznim
stream-ove.Jedno resenje je da zatvorim streamove pa da ih ponovo otvorim ali se nadam da ima nesto pametnije
[ hyle @ 30.08.2009. 10:23 ] @
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.
[ glamoc @ 30.08.2009. 13:16 ] @
E ovo za kesiranje sam znao,ali ovo za reset sam mislio da samo vrati pokaivac na pocetak stream-a a da nista ne brise.