Java, akışa yazılan nesneleri izler ve sonraki örnekler, gerçek bir serileştirilmiş nesne olarak değil, kimlik olarak yazılır.
Örneğin, örneğin, akışa "a" örneği yazarsanız, akış bu nesneye benzersiz bir kimlik verir (diyelim "1" diyelim). "A" serileştirmesinin bir parçası olarak, "b" yi serileştirmeniz gerekir ve akış buna başka bir kimlik ("2") verir. Akıma "b" yazarsanız, yazılan tek şey gerçek nesne değil kimliktir.
Giriş akışı tersini yapar: akıştan okuduğu her nesne için, çıkış akışıyla aynı algoritmayı kullanarak bir kimlik numarası atar ve bu kimlik numarası bir haritadaki nesne örneğine başvurur. Kimlik kullanılarak serileştirilmiş bir nesne gördüğünde, orijinal örneği haritadan alır.
Bu nasıl API dosyaları bunu açıklamaktadır:
Tek bir nesneye yapılan birden fazla başvuru, bir referans paylaşım mekanizması kullanılarak kodlanır, böylece nesnelerin grafikleri orijinalin yazıldığı zamanla aynı şekilde geri yüklenebilir
Bu davranış sorunlara neden olabilir: Akış her nesneye sabit bir başvuru içerdiğinden (kimliğin ne zaman değiştirileceğini bilmesi için), akışa çok fazla geçici nesne yazarsanız belleğiniz tükenebilir. Bunu arayarak çözersiniz reset()
.