我试图附加到对象的hashmap,但read方法的输出即使在附加之后也保持不变(第一次和第二次称为read方法)。我在网上搜索了关于追加objectoutputstream的内容,根据答案我覆盖了 writeStreamHeader
子类中的方法 AppendableObjectOutputStream
,但对我不起作用。
public class MapObject {
public static void main(String args[]) {
new MapObject();
}
public MapObject() {
output1(); //createing objectOutputStream
read(); //first time called read method //output 15 20 14 12
output2(); //appending to objectOutputStream
read(); //second time called read method //output 15 20 14 12
}
public void output1() {
Map<Integer, List<Integer>> listMap = new HashMap<>();
listMap.put(1, new ArrayList<>());
listMap.get(1).add(15);
listMap.get(1).add(20);
listMap.put(2, new ArrayList<>());
listMap.get(2).add(14);
listMap.get(2).add(12);
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("map"))));
objectOutputStream.writeObject(listMap);
objectOutputStream.flush();
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void output2() {
Map<Integer, List<Integer>> listMap = new HashMap<>();
listMap.put(1, new ArrayList<>());
listMap.get(1).add(11);
listMap.get(1).add(12);
listMap.put(2, new ArrayList<>());
listMap.get(2).add(21);
listMap.get(2).add(22);
try {
AppendableObjectOutputStream appendableObjectOutputStream = new AppendableObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("map"), true)));
appendableObjectOutputStream.writeObject(listMap);
appendableObjectOutputStream.flush();
appendableObjectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void read() {
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("map"))));
Map<Integer, List<Integer>> listMap = (Map<Integer, List<Integer>>) objectInputStream.readObject();
listMap.values().forEach(v1 -> {
v1.forEach(System.out::println);
});
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}}
}
我发现objectoutputstream类的子类如下所示。
public class AppendableObjectOutputStream extends ObjectOutputStream {
public AppendableObjectOutputStream(OutputStream out) throws IOException {
super(out);
}
@Override
protected void writeStreamHeader() throws IOException {
}}
对不起,英语不好。
1条答案
按热度按时间slhcrj9b1#
问题在于
read()
方法。您正在将多个对象写入objectoutputstream,因此,必须从相应的objectoutputstream中读取多个对象: