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