Spec-Zone .ru
спецификации, руководства, описания, API
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT Спецификация Сериализации Объекта Java
версия 6.0

Пример Сериализуемых Полей





ПРИЛОЖЕНИЕ C


Темы:


Реализация Альтернативы C.1 В качестве примера java.io. Файл

Это приложение обеспечивает краткий пример того, как существующий class мог быть определен и реализован, чтобы взаимодействовать с существующей реализацией, но не требуя тех же самых предположений о представлении имени файла как Строка.

Система class java.io.File представляет имя файла и имеет методы для того, чтобы проанализировать, управляя файлами и каталогами по имени. У этого есть единственное частное поле, которое содержит текущее имя файла. Семантика методов, которые анализируют пути, зависит от текущего разделителя пути, который сохранен в статическом поле. Этот разделитель пути является частью сериализированного состояния файла так, чтобы имя файла могло быть скорректировано когда считано.

Сериализированное состояние a File объект определяется как сериализуемые поля и последовательность значений данных для файла. В этом случае есть один из каждого.

Serializable Fields:
    String path;     // path name with embedded separators
Serializable Data:
    char            // path name separator for path name
An alternate implementation might be defined as follows:
class File implements java.io.Serializable {
    ...
    private String[] pathcomponents;
    // Define serializable fields with the ObjectStreamClass
    
   /**
    * @serialField path String 
     *              Path components separated by separator.          
     */
   private static final ObjectStreamField[] serialPersistentFields
        = { new ObjectStreamField("path", String.class) };
    ...
        /**
      * @serialData  Default fields followed by separator character.             
    */ 
    private void writeObject(ObjectOutputStream s)
        throws IOException
    {
        ObjectOutputStream.PutField fields = s.putFields();
        StringBuffer str = new StringBuffer();
        for(int i = 0; i < pathcomponents; i++) {
            str.append(separator);
            str.append(pathcomponents[i]);
        }
        fields.put("path", str.toString());
        s.writeFields();
        s.writeChar(separatorChar); // Add the separator character
    }
    ...
    private void readObject(ObjectInputStream s)
        throws IOException
    {
        ObjectInputStream.GetField fields = s.readFields();
        String path = (String)fields.get("path", null);
        ...
        char sep = s.readChar(); // read the previous separator char
        // parse path into components using the separator
        // and store into pathcomponents array.
    }
}


СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT
Авторское право © 2005, 2010, Oracle и/или его филиалы. Все права защищены.