有没有一种简单的方法可以将arraylist/variables数据保存到Java文件中?
我有一个自定义类型的arraylist。在C语言中,我可以找出数组或变量存储在内存中的位置,然后将该部分内存保存到一个文件中,然后再次直接加载到数组/变量中有没有一种简单的方法可以将arraylist/variables数据保存到Java文件中?,java,file-io,arraylist,Java,File Io,Arraylist,我有一个自定义类型的arraylist。在C语言中,我可以找出数组或变量存储在内存中的位置,然后将该部分内存保存到一个文件中,然后再次直接加载到数组/变量中 在Java中如何实现这一点,有没有简单的方法?关键字是序列化。列表中的元素需要实现接口,以及该类中的所有元素 static class Baz implements Serializable { private static final long serialVersionUID = 1L; int i;
在Java中如何实现这一点,有没有简单的方法?关键字是序列化。列表中的元素需要实现接口,以及该类中的所有元素
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);
}
}
静态类Baz实现可序列化{
私有静态最终长serialVersionUID=1L;
int i;
字符串s;
公共Baz(inti,字符串s){this.i=i;this.s=s;}
}
@试验
public void serAL()抛出FileNotFoundException、IOException、ClassNotFoundException{
List List=Arrays.asList(新Baz(1,“一”)、新Baz(2,“二”)、新Baz(3,“三”);
try(ObjectOutputStream oos=newobjectoutputstream(newfileoutputstream(“al.dat”)){
oos.writeObject(列表);
}
try(ObjectInputStream ois=newobjectinputstream(newfileinputstream(“al.dat”)){
@抑制警告(“未选中”)
List serAL=(List)ois.readObject();
Assert.assertEquals(3,serAL.size());
Assert.assertEquals(1,serAL.get(0.i));
Assert.assertEquals(“一”,serAL.get(0.s);
Assert.assertEquals(2,serAL.get(1.i));
Assert.assertEquals(“两个”,serAL.get(1.s));
Assert.assertEquals(3,serAL.get(2.i));
Assert.assertEquals(“三”,serAL.get(2.s);
}
}
使用的示例如下:
阅读java序列化。我是
实现可序列化的和
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()));
}
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 ...