7

オブジェクトをファイルにシリアル化する方法については、さまざまな投稿を見てきましたが、それらはすべて、その方法とベストプラクティスについて本質的に矛盾しています。これが私が保存しようとしているものです:

public class IHandler{
    public double currentLoad;
    public String currentPrice;
    public String configArgs[];
};

configArgsのサイズは、ファイルを作成する必要があることがわかっていると想定できます。これまでのところ、次のようになっています。

public static void serializeDataOut(IHandler ISH)throws IOException{
    String fileName= "Test.txt";
    FileOutputStream fos = new FileOutputStream(fileName);
        //What do I do here?
    }

  public static IHandler serializeDataIn(){
      //What do I do here?
  }
4

4 に答える 4

10

オブジェクトをファイルに直接書き込みたいと思います

public static void serializeDataOut(IHandler ish)throws IOException{
    String fileName= "Test.txt";
    FileOutputStream fos = new FileOutputStream(fileName);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(ish);
    oos.close();
}

public static IHandler serializeDataIn(){
   String fileName= "Test.txt";
   FileInputStream fin = new FileInputStream(fileName);
   ObjectInputStream ois = new ObjectInputStream(fin);
   IHandler iHandler= (IHandler) ois.readObject();
   ois.close();
   return iHandler;
}

重要なコードを提供しました。例外処理を使用してこれを実装します。

于 2012-05-18T14:24:38.013 に答える
3

オブジェクトをシリアル化する方法の例:

public static void writeToFile(File path, Database data)
{
    try(ObjectOutputStream write= new ObjectOutputStream (new FileOutputStream(path)))
    {
        write.writeObject(data);
    }
    catch(NotSerializableException nse)
    {
        //do something
    }
    catch(IOException eio)
    {
        //do something
    }
}


public static Object readFromFile(File path)
{
    Object data = null;

    try(ObjectInputStream inFile = new ObjectInputStream(new FileInputStream(path)))
    {
        data = inFile.readObject();
        return data;
    }
    catch(ClassNotFoundException cnfe)
    {
        //do something
    }
    catch(FileNotFoundException fnfe)
    {
        //do something
    }
    catch(IOException e)
    {
        //do something
    }
    return data;
}   

詳細については、http://docs.oracle.com/javase/tutorial/jndi/objects/serial.htmlを参照してください。

于 2012-05-18T14:25:07.633 に答える
1

XMLDecoder / XMLEncoderを使用して、JavaBeanをxmlとしてシリアル化できます。2つのクラスに関するOracleのJavadocの例を次に示します。

(XMLDecoder)

   XMLDecoder d = new XMLDecoder(
                      new BufferedInputStream(
                          new FileInputStream("Test.xml")));
   Object result = d.readObject();
   d.close();

(XMLEncoder)

   XMLEncoder e = new XMLEncoder(
                      new BufferedOutputStream(
                          new FileOutputStream("Test.xml")));
   e.writeObject(new JButton("Hello, world"));
   e.close();

ゲッターとセッターを追加し、クラスをシリアライズ可能にする必要があることに注意してください。

于 2012-05-18T16:06:32.093 に答える
0

IHandlerをtest.txtファイルに書き込みますか?試す

ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.write(IHandler);

そのファイルからIHandlerを読み取りたい場合は、これを行う必要があります

ObjectInputStream ois = new ObjectInputStream(fos); 
IHandler iHandler = (IHandler) ois.readObject();
于 2012-05-18T14:19:51.597 に答える