2010-07-13 18 views
5

Bir * .ser dosyasında depolanan tüm nesneleri okumayı ve bunları bir nesne dizisinde saklıyorum. Bu dosyada saklanan nesnelerin sayısını nasıl alabilirim (Böylece dizinin number_of_objects uzun olmasını bildirebilirim)?* .ser dosyasında depolanan nesnelerin sayısı nasıl sayılır

API'yi kontrol ettim ve İstenen bir işlevi bulamadım. kod

-edit-
A Parça:

Ser[] objTest2 = new Ser[number_of_objects]; 
for(int i=0; i<=number_of_objects, i++) { 
    objTest2[i] = (Ser)testOS2.readObject(); 
    objTest2[i].printIt(); 
} 
+1

'* .ser' dosyası nedir? – jjnguy

+0

Seri hale getirilmiş nesneleri depolayan bir dosya (uygun terminolojiyi bilmiyorum, bu benim java ile ilk haftam). – MoonStruckHorrors

+0

Tamam, peki sizin istediğiniz şey "Liste" arayüzüdür. Özel uygulama "ArrayList" olacaktır. – jjnguy

cevap

3

Ne bakmak istiyorum ArrayList sınıftır.

Temel olarak dinamik olarak büyüyen bir dizidir.

Öyle gibi buna öğeler ekleyebilirsiniz: bunu yeni öğeler eklemek olarak

ArrayList list = new ArrayList(); 
list.add(someObject); 
list.add(anotherBoject); 

liste büyüyecek. Yani zamanın büyüklüğünü bilmek zorunda değilsin.

Listeden sonlandırırsanız bir dizi dizisi çıkarmanız gerekirse, Listenin toArray() yöntemini kullanabilirsiniz.

Object[] arr = list.toArray(new Object[list.size()]); 

Düzenleme: available() sanmıyorum *

List<Ser> objTest2 = new ArrayList<Ser>(); 
while (testOS2.available > 0) { 
    Ser toAdd = ((Ser)testOS2.readObject()); 
    toAdd.printIt(); 
    objTest2.add(toAdd); 
} 

daha bayt olup olmadığını veya olmasın için güvenilir bir testtir: Burada
neye ihtiyacınız genel bir uygulamasıdır okuyun.

+0

Burada buna ihtiyacım olduğunu düşünmüyorum. İşte kodun bir parçası. ana yazıya eklenen kod eklendi. – MoonStruckHorrors

+1

@MoonStruckHorros Bunu zorunlu kılıyorsunuz (ancak jenerik ekliyorsunuz). (Üst düzey) nesnelerin sayısını bulmak için akışı kaldırmanız gerekir (bu bilgiyi bir yere saklamak istemediyseniz)./Genel olarak, referans dizilerinden kaçınılmalıdır - bunun yerine 'List 'i kullanın. –

+0

'available()' herhangi bir şekilde dosyanın sonu için bir test değildir. Javadoc'a bakın. Bunu tespit etmenin doğru yolu, EOFException'ı yakalamaktır. – EJP

-1

EOFException'ı alana kadar sadece nesneleri okumaya devam edin. Bunun için böyle. Ve bir dizi yerine bir List kullanın, böylece sayıma önceden ihtiyacınız yoktur.

+0

Bu cevapta bir sorun mu var? – EJP

-1
while(true) 
{ 

     try 
     { 
     Employee e=(Employee) ois.readObject(); 
     System.out.println("successfully deserialized.........showing details of object."); 
     e.display(); 
     } 

     catch(Exception e) 
     { 
      if(e instanceof java.io.EOFException) 
      { 
      System.out.println("All objects read and displayed"); 
      break; 
      } 
      else 
      { 
       System.out.println("Some Exception Occured."); 
       e.printStackTrace(); 

      } 
     } 
} 
+1

'EOFException' ayrı olarak yakalanmalı, böyle algılanmamalıdır. Sadece kod bir cevap değil: açıklamanız gerekiyor. – EJP

İlgili konular