2013-09-28 35 views
0

我需要将字符串列表存储到Java中的单个字段中。顺序很重要,我宁愿将它存储为可读的格式。将字符串列表存储为可读的路径

完美的解决方案将存储它像一个xPath,但我只知道用于编译复杂的xml文件到xPath的库,而不是字符串列表。

我自己写的解决方案很容易变得太复杂,因为我想支持包含任何字符的字符串,包括我用作分隔符的字符串。

我目前使用的序列化这样:

String[] items = new String[3]; 
items[0] = item1; 
items[1] = item2; 
items[2] = item3; 
byte[] bytes = SerializationUtils.serialize(items); 
System.out.println("Serialized:\n"+Arrays.toString(bytes)); 

String[] read = (String[]) SerializationUtils.deserialize(bytes); 
System.out.println("Read:"); 
for(String s : read) { 
    System.out.println(s); 
} 

输出:

[-84, -19, 0, 5, 117, 114, 0, 19, 91, 76, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 83, 116, 114, 105, 110, 103, 59, -83, -46, 86, -25, -23, 29, 123, 71, 2, 0, 0, 120, 112, 0, 0, 0, 3, 116, 0, 7, 110, 117, 109, 98, 101, 114, 49, 116, 0, 8, 110, 117, 109, 98, 101, 114, 47, 50, 116, 0, 8, 110, 117, 109, 98, 101, 114, 92, 51]

这工作,但除了产生一个很长的字符串,它也产生一个非 - 人类可读的字符串。

我该如何最好地以人类可读的方式存储此路径,并尽可能在我的代码中尽可能避免并发症?

解决方案

这是使用OstermillerUtils通过ct_的建议我的解决方案(谢谢!)。

String item1="number1"; 
String item2="number/2"; 
String item3="number\\3"; 
String item4="//number/4\\"; 
String item5=",num\"ber5,"; 
String item6="number,6"; 
String[] items = new String[6]; 
items[0] = item1; 
items[1] = item2; 
items[2] = item3; 
items[3] = item4; 
items[4] = item5; 
items[5] = item6; 

    System.out.println("Test values"); 
for(String s : items) { 
    System.out.println(s); 
} 

StringWriter writer = new StringWriter(); 
CSVPrinter printer = new CSVPrinter(writer); 
printer.changeDelimiter('/'); 
printer.write(items); 
System.out.println("Persisted:\n\t"+writer.toString()); 

String[][] results = CSVParser.parse(writer.toString(), '/'); 
for (int j=0; j<results[0].length; j++){ 
    System.out.println(results[0][j]); 
} 
+0

你的意思是“人类可读的格式”? – ssedano

+0

而不是上面打印的输出,例如像'item1/item2/item3'这样的xPath。 –

+0

上面输出的输出是'Arrays.toString(bytes)'。您正在打印字节数组。你期望打印什么? –

回答

2

所以,你想序列化和反序列化一个字符串数组为一个字符串,并返回?看看http://ostermiller.org/utils/CSV.html - 它可以使用任意的分隔符对数组进行序列化和反序列化。

+0

就是我正在寻找的东西!谢谢! :) –

+0

没问题 - 很高兴它有帮助。 –

0

JAXB只使用注释将工作。最好有一个容器类与列表字段。然后你得到XML。

相关问题