在java中,如何将对象写入文件,然后从文件中读取它并将其转换回HDFS中的原始对象?

时间:2012-03-30 16:06:40

标签: java hdfs

我正在尝试将double []写入HDFS中的文件,稍后,我需要从文件中读回它并将其转换回double []。这里有人知道怎么做吗?

谢谢,

1 个答案:

答案 0 :(得分:3)

ObjectOutputStream

  

ObjectOutputStream写入Java的原始数据类型和图形   对象到OutputStream。可以读取(重构)对象   使用ObjectInputStream。持久存储对象即可   通过使用流的文件完成。如果流是   网络套接字流,对象可以在另一个上重构   主持人或在另一个过程中。

     

只有支持java.io.Serializable接口的对象才可以   写入溪流。每个可序列化对象的类都是编码的   包括类的名称和签名,值的类   对象的字段和数组,以及任何其他对象的闭包   从初始对象引用。

     

writeObject方法用于将对象写入流。任何   对象,包括字符串和数组,是用writeObject编写的。   可以将多个对象或基元写入流。该   必须从相应的ObjectInputstream读回对象   与他们写的相同的类型和顺序。

     

也可以使用以下方法将原始数据类型写入流中   DataOutput中的适当方法。字符串也可以使用   writeUTF方法。

<强> ObjectInputStream

  

ObjectInputStream对原始数据和对象进行反序列化   以前使用ObjectOutputStream编写。

     

ObjectOutputStream和ObjectInputStream可以提供应用程序   与a一起使用时对象图的持久存储   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;
}