から、私はオブジェクトのコレクションを持っている別のシリアル化されたオブジェクトのシリーズを読む:書き込み/に/ファイル
Map<BufferedImage, Map<ImageTransform, Set<Point>>> map
私は、ファイルにそれらを書き、その後、後ろにそれらを読むことができるようにしたいです同じ構造体。
そのままのBufferedImageはSerializable
(もExternalizable
)インタフェースを実装していないので、私はちょうど、コレクションを書き込むことはできません。ですから、ImageIO
クラスのメソッドを使用して画像を書き込む必要があります。
ImageTransform
は、Serializable
を実装するカスタムオブジェクトです。だから、値は私のマップコレクションの一部であり、そのまま書くことができるはずです。ここで
私は、ファイルに書き込みに何をすべきかです:バックファイルからを読んでここ
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
for (BufferedImage image : map.keySet()) {
ImageIO.write(image, "PNG", out); // write the image to the stream
out.writeObject(map.get(image)); // write the 'value' part of the map
}
は私がに何をすべきかです。しかし
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
while(true) {
try {
BufferedImage image = ImageIO.read(in);
Map<ImageTransform, Set<Point>> value =
(Map<ImageTransform, Set<Point>>) in.readObject(); // marker
map.put(image, value);
} catch (IOException ioe) {
break;
}
}
を、これは機能しません。私はjava.io.OptionalDataException
をのマーカーにします。
java.io.OptionalDataException
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1300)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
私の質問は、まず、書き込みのコンセプトは正しいですか?この場合にはImageIO#write
が良いですか?BufferedImage#getRgb
int[]
アレイを使用/保存することについて考えてください。配列はよりコンパクトです(ファイル内のスペースが少なくなります)。
第2に、オブジェクトをファイルからどのように読み戻す必要がありますか? EOFに達した時期はどうすればわかりますか?なぜ上は動作しないのですか?
私は提供された情報が十分であることを望みます、あなたが何かの詳細情報が必要な場合は教えてください。
ありがとうございます。
うん、私はこれを念頭に置いていました。私はこれを見栄えしたいと思っています。私はそれがうまくいけば、それは本当に良い解決策になるには十分なクリーンだと思う。ありがとう。 – c00kiemon5ter