首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种简单的方法可以将数组列表/变量数据保存到Java文件中?

问有没有一种简单的方法可以将数组列表/变量数据保存到Java文件中?
EN

Stack Overflow用户
提问于 2013-11-25 19:12:00
回答 2查看 138关注 0票数 0

我有一个定制类型的排列表。在C语言中,我可以找出数组或变量存储在内存中的位置,然后将这部分内存保存到文件中,然后再次直接加载到数组/变量中。

我将如何在Java中完成这个任务,有一个简单的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-25 19:32:10

关键字是序列化。列表中的元素需要实现可序列化接口,也需要实现该类中的所有元素。

代码语言:javascript
复制
static class Baz implements Serializable {
    private static final long   serialVersionUID    = 1L;
    int i;
    String s;
    public Baz(int i, String s) { this.i = i; this.s = s; }
}

@Test
public void serAL() throws FileNotFoundException, IOException, ClassNotFoundException {
    List<Baz> list = Arrays.asList(new Baz(1, "one"), new Baz(2, "two"), new Baz(3, "three"));
    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("al.dat"))) {
        oos.writeObject(list);
    }
    try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("al.dat"))) {
        @SuppressWarnings("unchecked")
        List<Baz> serAL = (List<Baz>) ois.readObject();
        Assert.assertEquals(3, serAL.size());
        Assert.assertEquals(1, serAL.get(0).i);
        Assert.assertEquals("one", serAL.get(0).s);
        Assert.assertEquals(2, serAL.get(1).i);
        Assert.assertEquals("two", serAL.get(1).s);
        Assert.assertEquals(3, serAL.get(2).i);
        Assert.assertEquals("three", serAL.get(2).s);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-25 19:36:09

一个使用克里奥,基准测试的例子

代码语言:javascript
复制
static class Foo{
    String name;

    Foo() {
    }

    Foo(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Foo{");
        sb.append("name='").append(name).append('\'');
        sb.append('}');
        return sb.toString();
    }
}

public static void main(String[] args) {
    Kryo kryo = new Kryo();

    Output output = new Output(100);

    List<Foo> foos = Arrays.asList(new Foo("foo1"), new Foo("foo2"), new Foo("foo3"));

    kryo.writeObject(output, foos.subList(1, 3));

    List<Foo> foosAfter = kryo.readObject(new Input(output.toBytes()), ArrayList.class);

    System.out.println("before: " + foos);
    System.out.println("after: " + foosAfter);
    System.out.println("bytes: " + Arrays.toString(output.toBytes()));
}

输出:

代码语言:javascript
复制
before: [Foo{name='foo1'}, Foo{name='foo2'}, Foo{name='foo3'}]
after: [Foo{name='foo2'}, Foo{name='foo3'}]
bytes: [1, 2, 1, 0, 99, 104, 97, 115, 99, 104, 101, 118, 46, 117, 116 ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20201261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档