В Java, как записать объект в файл, а затем прочитать его из файла и преобразовать его обратно в исходный объект в HDFS? - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь записать double [] в файл в HDFS, и позже мне нужно будет прочитать его обратно из файла и преобразовать обратно в double []. Кто-нибудь здесь знает, как это сделать?

Спасибо

1 Ответ

3 голосов
/ 30 марта 2012

ObjectOutputStream

ObjectOutputStream записывает примитивные типы данных и графики Java объекты в OutputStream. Объекты могут быть прочитаны (восстановлены) используя ObjectInputStream. Постоянное хранение объектов может быть достигается с помощью файла для потока. Если поток сетевой сокет потока, объекты могут быть восстановлены на другом хост или другой процесс.

Только объекты, которые поддерживают интерфейс java.io.Serializable записано в потоки. Класс каждого сериализуемого объекта кодируется в том числе имя класса и подпись класса, значения поля и массивы объекта, а также закрытие любых других объектов ссылка на исходные объекты.

Метод writeObject используется для записи объекта в поток. любой Объект, включая строки и массивы, записывается с помощью writeObject. Несколько объектов или примитивов могут быть записаны в поток. объекты должны быть прочитаны обратно из соответствующего ObjectInputstream с теми же типами и в том же порядке, в котором они были написаны.

Примитивные типы данных также могут быть записаны в поток с помощью соответствующие методы из DataOutput. Строки также могут быть написаны с использованием метод writeUTF.

ObjectInputStream

ObjectInputStream десериализует примитивные данные и объекты ранее написано с использованием ObjectOutputStream.

ObjectOutputStream и ObjectInputStream могут предоставить приложение с постоянным хранилищем для графиков объектов при использовании с FileOutputStream и FileInputStream соответственно. ObjectInputStream используется для восстановления этих объектов, ранее сериализованных. Другое использование включать передачу объектов между хостами с использованием потока сокетов или для маршалинг и демаршалинг аргументов и параметров в удаленном система связи.

ObjectInputStream гарантирует, что типы всех объектов в графе созданные из потока соответствуют классам, присутствующим в Java Virtual Машина. Классы загружаются по мере необходимости с использованием стандартных механизмов.

Например, Я могу сохранить генератор ключей для шифрования данных следующим образом:

public static void saveKeyToFile(SecretKey key)
        throws FileNotFoundException, IOException {
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
            "/path/to/mysavedobject"));
    oos.writeObject(key);
    oos.close();
}

public static SecretKey getKeyFromFile(String dir) throws IOException,
        ClassNotFoundException {
    if (dir == null) { 
        dir = "/path/to/mysavedobject";
    }
    SecretKey key = null;
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
            dir));
    key = (SecretKey) ois.readObject();
    ois.close();
    return key;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...