将 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();
}
}