Java serialization of multidimensional array多維數組爲字符串(用於機器人的SQLite的)
反正有序列的2D陣列爲一個字符串,在存儲器?
我想序列化一個二維數組到一個SQLite3字符串,所以我可以把它放在一個字段。上面這個例子的問題在於作者使用了fileIO,它在移動設備上是一個速度殺手。
Java serialization of multidimensional array多維數組爲字符串(用於機器人的SQLite的)
反正有序列的2D陣列爲一個字符串,在存儲器?
我想序列化一個二維數組到一個SQLite3字符串,所以我可以把它放在一個字段。上面這個例子的問題在於作者使用了fileIO,它在移動設備上是一個速度殺手。
此代碼序列化INT陣列和反序列化迴轉換成int數組
private static final char NEXT_ITEM = ' ';
public static void main(String[] args) throws IOException {
int[][] twoD = new int[][] { new int[] { 1, 2, 2, 4, 4 }, new int[] { 3, 4, 0 }, new int[] { 9 } };
int[][] newTwoD = null; // will deserialize to this
System.out.println("Before serialization");
for(int[] arr : twoD) {
for(int val : arr) {
System.out.println(val);
}
}
String str = serialize(twoD);
System.out.println("Serialized: [" + str + "]");
newTwoD = deserialize(str);
System.out.println("After serialization");
for(int[] arr : newTwoD) {
for(int val : arr) {
System.out.println(val);
}
}
}
private static String serialize(int[][] array) {
StringBuilder s = new StringBuilder();
s.append(array.length).append(NEXT_ITEM);
for(int[] row : array) {
s.append(row.length).append(NEXT_ITEM);
for(int item : row) {
s.append(String.valueOf(item)).append(NEXT_ITEM);
}
}
return s.toString();
}
private static int[][] deserialize(String str) throws IOException {
StreamTokenizer tok = new StreamTokenizer(new StringReader(str));
tok.resetSyntax();
tok.wordChars('0', '9');
tok.whitespaceChars(NEXT_ITEM, NEXT_ITEM);
tok.parseNumbers();
tok.nextToken();
int rows = (int) tok.nval;
int[][] out = new int[rows][];
for(int i = 0; i < rows; i++) {
tok.nextToken();
int length = (int) tok.nval;
int[] row = new int[length];
out[i] = row;
for(int j = 0; j < length; j++) {
tok.nextToken();
row[j] = (int) tok.nval;
}
}
return out;
}
你是最棒的,男人。你的代碼完美地工作。 – Ring 2012-02-13 06:56:55
用戶T3hC13h有一個有趣的方法在這裏:不同大小轉換成String的http://www.dreamincode.net/forums/topic/100732-serializingdeserializing-a-2-dimensional-array/
這似乎工作,但它使得它很難回到字節數組。 – 2011-03-25 16:46:15
我有完全相同的問題。感謝您的詢問。 – Ring 2012-02-13 06:58:54