CSV 形式のデータを xml 要素内に配置することの長所と短所は何ですか?
マトリックス データ フィールドを持つ Java のオブジェクトを xml にシリアル化する必要があります。私は、Jaxb でデータ バインディングを使用するという考えを断念しました。コレクションを含むジェネリックとコレクションは、対処するのが面倒です。
マトリックスの単純なスキーマを考えましたが、CSV へのマトリックスのシリアル化も実装する必要があるため、CSV 文字列を要素内のテキスト ノードとしてダンプしないのはなぜですか? また、ファイルが少し小さくなります。
この考えに反対する議論を思いつくことができますか?
この要素に csv mimetype のようなものを追加する必要がありますか?
編集:これが私が選んだ解決策です。Super-CSVを使用しています。ジェネリック型は実行時に消去されるため、列挙型が必要です。メインの xml ファイルは csv ファイルを参照します。
static public enum SerializableType{INTEGER,DOUBLE,...};
@SuppressWarnings("unchecked")
public static <T> Matrix<T> fromCSV(InputStream in, CsvPreference pref, SerializableType t)
{
Matrix<T> o = new Matrix<T>();
// Super-csv class
CsvListReader csv_reader = new CsvListReader(new InputStreamReader(in), pref);
Integer n = null;
try {
List<String> l = csv_reader.read();
n = l.size(); o.n = n;
int i=0;
while(l!=null)
{
o.appendRow();
T val;
for(int j=0;j<n;j++)
{
switch(t)
{
case INTEGER:
val = (T)Integer.valueOf(Integer.parseInt(l.get(j)));
break;
case DOUBLE:
val = (T)Double.valueOf(Double.parseDouble(l.get(j)));
break;
case <...>
default:
throw new IllegalArgumentException();
}
o.set(i,j, val);
}
i++;
l = csv_reader.read();
}
csv_reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return o;
}
public static<T> void toCSV(Matrix<T> m, CsvListWriter csv_writer, SerializableType t)
{
try {
for(int i=0;i<m.rowCount();i++)
{
ArrayList<String> l = new ArrayList<String>();
for(int j=0;j<m.columnCount();j++)
{
if(m.get(i,j)==null)
{
l.add(null);
}
else{
switch(t)
{
case INTEGER:
l.add(Integer.toString((Integer)m.get(i,j)));
break;
case DOUBLE:
l.add(Double.toString((Double)m.get(i,j)));
break;
case
<...>
default:
throw new IllegalArgumentException();
};
}
}
csv_writer.write(l);
}
csv_writer.flush();
csv_writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}