多维数组到字符串(适用于 android 的 SQLite)

发布于 2024-10-26 18:53:40 字数 129 浏览 1 评论 0原文

无论如何,有没有办法将二维数组

序列化为字符串,在记忆?

我正在尝试将 2D 数组序列化为 SQLite3 字符串,这样我就可以将其放入字段中。上面例子的问题在于作者使用了fileIO,这在移动设备上是速度杀手。

Java serialization of multidimensional array

Is there anyway to serialize a 2D array to a string, in memory?

I'm trying to serialize a 2D array to an SQLite3 string, so I can put it in a field. The problem with the example above is that the author used fileIO, which on mobile devices is a speed killer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

困倦 2024-11-02 18:53:40

此代码将不同大小的 int 数组序列化为 String 并将其反序列化回 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;
}

This code serialize int arrays of different sizes into String and deserialize it back into int arrays

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文