Java 初始化int数组中的值后,对数组的更新将不会出现在序列表中

Java 初始化int数组中的值后,对数组的更新将不会出现在序列表中,java,arrays,serialization,initialization,Java,Arrays,Serialization,Initialization,我一直在研究序列化对象,以便通过网络轻松快速地发送对象。不过,这其中有一个大问题。初始化数组中的值后,该数组的序列化对象将始终保持为初始化的数字。我甚至不确定情况是否如此,因为我非常确定int的默认值为0。那么,它不会保持为0而不是我将其更改为的值吗 public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { FileOutputStr

我一直在研究序列化对象,以便通过网络轻松快速地发送对象。不过,这其中有一个大问题。初始化数组中的值后,该数组的序列化对象将始终保持为初始化的数字。我甚至不确定情况是否如此,因为我非常确定int的默认值为0。那么,它不会保持为0而不是我将其更改为的值吗

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
    FileOutputStream ostr = new FileOutputStream(new File("ObjectFile.yeh"));
    FileInputStream istr = new FileInputStream(new File("ObjectFile.yeh"));
    ObjectOutputStream out= new ObjectOutputStream(ostr);
    int[] hi = new int[5];
    hi[0]=3;
    out.writeUTF("This is an Array");
    out.writeObject(hi);
    hi[0]=5;
    out.writeObject(hi);
    out.writeUTF("Array Over");
    out.close();
    ObjectInputStream in = new ObjectInputStream(istr);
    System.out.println(in.readUTF());
    int[] h = (int[]) in.readObject();
    System.out.println(h[0]);
    int[] j = (int[]) in.readObject();
    System.out.println(j[0]);
    System.out.println(in.readUTF());
    in.close();
}
当我运行以下代码时,它会打印

This is an Array
3
3
Array Over
我应该如何解决这个问题

更新:

在进一步的实验之后,我发现在一个对象被序列化一次之后,它的序列似乎并没有改变。如图所示,我编辑了字符串数组,它的内容在通过对象流发送后不会改变

    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
    FileOutputStream ostr = new FileOutputStream(new File("ObjectFile.yeh"));
    FileInputStream istr = new FileInputStream(new File("ObjectFile.yeh"));
    ObjectOutputStream out= new ObjectOutputStream(ostr);
    String[] hi = new String[5];
    hi[0]="Hi";
    out.writeUTF("This is an Array");
    out.writeObject(hi);
    hi[0]="Hello";
    hi[1]="Hoopla";
    out.writeObject(hi);
    out.writeUTF("Array Over");
    out.close();
    ObjectInputStream in = new ObjectInputStream(istr);
    System.out.println(in.readUTF());
    String[] h = (String[]) in.readObject();
    System.out.println(h[0]+" "+h[1]);
    String[] j = (String[]) in.readObject();
    System.out.println(j[0]+" "+j[1]);
    System.out.println(in.readUTF());
    in.close();
}
这张照片

This is an Array
Hi null
Hi null
Array Over

在更改输出流之前重置输出流

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
    FileOutputStream ostr = new FileOutputStream(new File("ObjectFile.yeh"));
    FileInputStream istr = new FileInputStream(new File("ObjectFile.yeh"));
    ObjectOutputStream out= new ObjectOutputStream(ostr);
    int[] hi = new int[5];
    hi[0]=3;
    out.writeUTF("This is an Array");
    out.writeObject(hi);
    out.reset(); // Add this line
    hi[0]=5;
    out.writeObject(hi);
    out.writeUTF("Array Over");
    out.close();
    ObjectInputStream in = new ObjectInputStream(istr);
    System.out.println(in.readUTF());
    int[] h = (int[]) in.readObject();
    System.out.println(h[0]);
    int[] j = (int[]) in.readObject();
    System.out.println(j[0]);
    System.out.println(in.readUTF());
    in.close();
}

在更改输出流之前重置输出流

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
    FileOutputStream ostr = new FileOutputStream(new File("ObjectFile.yeh"));
    FileInputStream istr = new FileInputStream(new File("ObjectFile.yeh"));
    ObjectOutputStream out= new ObjectOutputStream(ostr);
    int[] hi = new int[5];
    hi[0]=3;
    out.writeUTF("This is an Array");
    out.writeObject(hi);
    out.reset(); // Add this line
    hi[0]=5;
    out.writeObject(hi);
    out.writeUTF("Array Over");
    out.close();
    ObjectInputStream in = new ObjectInputStream(istr);
    System.out.println(in.readUTF());
    int[] h = (int[]) in.readObject();
    System.out.println(h[0]);
    int[] j = (int[]) in.readObject();
    System.out.println(j[0]);
    System.out.println(in.readUTF());
    in.close();
}