ファイル内の各オブジェクトをどのように表現するかを決定する必要があります。たとえば、ListMultimap
含まれているString
s の場合、単純に文字列値を記述できますが、複雑なオブジェクトを扱っている場合は、それらのオブジェクトの表現を として生成する必要がありますbyte[]
。これを使用する場合Properties
は、Base64 でエンコードする必要があります。
基本的な読み取り方法は次のようになります。
public ListMultimap<Object, Object> read(InputStream in) throws IOException
{
ListMultimap<Object, Object> index = ArrayListMultimap.create();
Properties properties = new Properties();
properties.load(in);
for (Object serializedKey : properties.keySet())
{
String deserializedKey = deserialize(serializedKey);
String values = properties.get(serializedKey);
for (String value : values.split(","))
{
index.put(deserializedKey, deserialize(value));
}
}
return index;
}
そして、書き込み方法は次のとおりです。
public void write(ListMultimap<Object, Object> index, OutputStream out) throws IOException
{
Properties properties = new Properties();
for (Object key : index.keySet())
{
StringBuilder values = new StringBuilder();
for (Object value = index.get(key))
{
values.append(serailize(value)).append(",");
}
properties.setProperty(serailize(key), values.subString(0, values.length - 1));
}
properties.store(out, "saving");
}
この例では、要件に応じて定義する必要があるserialize
およびdeserialize
メソッドを使用していますが、署名は次のとおりです。
public String serialize(Object object)
と
public Object deserialize(String s)