0

を使用してファイルに書き込もうとListMultimapPropertiesましたが、不可能のようです。Properties を使用して ListMultimap をファイルに書き込み、読み取るの質問を参照してください。

Properties保存ListMultimap方法が間違っている場合ListMultimap、ファイルに保存するにはどうすればよいでしょうか。また、ファイルから読み返すにはどうすればよいでしょうか。

たとえば、私が持っているとしましょう:

ListMultimap<Object, Object> index = ArrayListMultimap.create();

ListMultimapこれをファイルに書き込み、ファイルから読み戻すメソッドを作成するにはどうすればよいですか。

writeToFile(ListMultimap multiMap, String filePath){
    //??
}

ListMultimap readFromFile(String filePath){
    ListMultimap multiMap;
    //multiMap = read from file
    return multiMap;
}
4

1 に答える 1

2

ファイル内の各オブジェクトをどのように表現するかを決定する必要があります。たとえば、ListMultimap含まれているStrings の場合、単純に文字列値を記述できますが、複雑なオブジェクトを扱っている場合は、それらのオブジェクトの表現を として生成する必要があります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)
于 2013-07-17T15:13:36.477 に答える