雑記帳

   ObjectOutuptStream out = null;
   try {
       out = new ObjectOutputStream(new FileOutputStream("foo.ser"));
       out.writeObject(foo);
   } catch (FileNotFoundException e) {
       handleError(e);
   } catch (IOException e) {
       handleError(e);
   } finally {
       try {
           if (out != null) {
               out.flush();
               out.close();
           }
       } catch (IOException e) {
       }
   }

デシリアライゼーション(復元)

   Foo foo = null;
   ObjectInputStream in = null;
   try {
       in = new ObjectInputStream(new FileOutputStream("foo.ser"));
       foo = (Foo)in.readObject();
   } catch (FileNotFoundException e) {
       handleError(e);
   } catch (OptionalDataException e) {
       handleError(e);
   } catch (ClassNotFoundException e) {
       handleError(e);
   } catch (IOException e) {
       handleError(e);
   } finally {
       try {
           if (in != null) {
               in.close();
           }
       } catch (IOException e) {
       }
   }

ObjectWriterとReaderの拡張 "T.Ikura" <ikura@nagoya.iij.ad.jp> writes:

fout = new FileOutputStream(filename, true);

oout = new NonHeaderObjectOutputStream(fout);

で何回か書き込んで

oin = new NonHeaderObjectInputStream(fin);

で無事全て読み込めました。

なるほど、ObjectInputStreamの方もheaderを読まないようにしたのですか。

こちらの意図としては、

 ・最初の一回は普通のObjectOutputStreamでwriteObjectして、
 ・appendするときはNonHeaderObjectOutputStreamでwriteObjectして、
 ・読むときは普通のObjectInputStreamでreadObjectする。

というものでした。

headerなしでも動いてしまうのですね。headerはmagic番号とversion番号の チェックをしているだけなのですね。取ってしまってもいいといえばいいかも しれないですが、他のアプリケーションと組み合わせる可能性を考えると、 上のようにheaderを付けるようにした方がいいかも。

「最初の一回」かどうかで場合分けするのがあれでしたら、「ファイルを作る」 という操作で、

   new ObjectOutputStream(new FileOutputStream(filename)).close();

として、headerだけのファイルを作り、 「オブジェクトを追加書き出しする」という操作で、

   ObjectOutput oo = new NonHeaderObjectOutputStream(
       new FileOutputStream(filename, true)
   );
   oo.writeObject(...

とすればよいのではないかと。

		String dirname="."+File.separator+"savedat";
		load.removeAllItems();
		File dir=new File(dirname);
		String[] filelist=dir.list();
		
		for(int i=0;i<filelist.length;i++){
			if(Pattern.matches(".*\\.dat$",filelist[i])){
				load.addItem(filelist[i]);
			}

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-02-01 (日) 14:38:23 (3365d)