2015-05-24 11 views
3

Наличие двух классов игрока и игры. Реализация сериализации и fileio. Сериализация работает нормально. Невозможно получить максимальную длину массива объектов. Я хочу, чтобы объекты не присутствовали в массиве.Как инициализировать массив объектов после десериализации

class player { 
    private String username; 
} 

class game { 
    player array[] = new player[100]; 
    int arraysize; 
    player player; 

    public void setArraySize(int arraySize) { 
    this.arraySize = arraySize; 
    } 

    public void readdata() { // reading from file starts 
    //ObjectInputStream input = null; 
    try { 
     ObjectInputStream input = new ObjectInputStream(new FileInputStream("myfile.txt")); 
     array = (NimPlayer[]) input.readObject(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    initializearraylength(array); 
    }// reading file ends 

    public void initializearraylength(NimPlayer[] temparray) { 
    int size = temparray.length; 
    setArraySize(size); 
    System.out.println(size); // output displays size 100 
    } 
} 
public display() { 
    for (int i = 0; i < arraysize; i++) { 
    System.out.println(array[i].getusername()); 
    } 
} 

переменная ARRAYSIZE не initializing.I попробовал этот код и получение исключения нулевого указателя в readdata() FirstLine примерочных.

java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) 
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
    at java.io.ObjectInputStream.<init>(Unknown Source) 
    at game.readdata(game.java:507) 
+0

Пожалуйста, пост StackTrace за исключение –

ответ

0

Количество объектов

List<NimPlayer> tmp = Arrays.asList((NimPlayer[]) input.readObject()); 
    System.out.println(tmp.size()); 

Для ошибки, изменить объявленная переменная INT ArraySize в ARRAYSIZE

+0

, что это моя писанина ошибки игнорировать этот – Sam

+0

@Shivam как StackTrace показывает ваш файл пуст – Dien

+0

@Shivam Я забыл спросить вас, если вы пишете весь ваш массив (NimPlayer []) один раз или вы записываете их последовательно (object = NimPlayer) в файл. – Dien

1

Ваш файл пуст.

Я не знаю, почему у вас даже есть переменная arraySize, если она всегда будет такой же, как array.length. Просто удалите ее. И вам, конечно, не нужно два метода, чтобы установить его, если вы его сохраните.

+0

После удаления тех, я получаю ту же ошибку. Его правда, что файл пуст, потому что в начале ничего не хранится. – Sam

+0

@Shivam Если вы ничего не хранили в начале, возможно, нет объекта, из которого вы читаете. Сначала вам нужно сначала сериализовать объект. –

+0

Если в файле ничего не хранится, почему вы удивлены тем, что не получаете ничего от этого? Это не имеет никакого смысла. – EJP

Смежные вопросы