[[雑記帳]]

    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();
//		Pattern datpattern =Pattern.compile("sam",Pattern.CASE_INSENSITIVE);
		
		for(int i=0;i<filelist.length;i++){
//			Matcher m=datpattern.matcher(filelist[i]);
//			if(m.matches())System.out.println(filelist[i]);
			if(Pattern.matches(".*\\.dat$",filelist[i])){
//				System.out.println(filelist[i]);
//				Pattern fileP=Pattern.compile(".");
//				String[] file=fileP.split(filelist[i]);
				load.addItem(filelist[i]);
			}

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS