将数组序列化写入文件后,为什么不能正确读出? public static class AA implements Serializable { int CRF[] = new int[200]; }用AA内的数组作数据保存,写入文件后,为什么不能正确读出结果?有没有人遇到这样的问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把代码帖出来:import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class crtt { static AA aa = new AA() ; public static class AA implements Serializable { int CRF[] = new int[200]; } public static void wrf(String fpw,AA aw) { try { FileOutputStream fos = new FileOutputStream(fpw); ObjectOutputStream out = new ObjectOutputStream(fos); //AA a = new AA(); out.writeObject(aw); } catch (IOException e) { e.printStackTrace(); } } public static void rdf(String fpr,AA ar) { try { FileInputStream fis = new FileInputStream(fpr); ObjectInputStream in = new ObjectInputStream(fis); ar = (AA) in.readObject(); } catch (IOException e) { crtt.wrf(fpr,ar); } catch (ClassNotFoundException e) { crtt.wrf(fpr,ar); } } public static void main(String[] args) { String fp1 = "D:\\javad\\CS.txt"; crtt.wrf(fp1,aa); System.out.println(aa.CRF[1]); aa.CRF[1] = 1; aa.CRF[2] = 1; crtt.wrf(fp1,aa); crtt.rdf(fp1,aa); System.out.println(aa.CRF[1]); System.out.println(aa.CRF[2]); }}第一次运行将建立文件,并且将内容写进去,然后将代码改变一下,把红颜色字体的部分注销掉,编译运行,读出内容,结果还是0,0。 对于序列化的数据需要实现 Serializable .对于数组对象来说,并没有实现这个功能。所以这个在序列化的时候不会传输。嗯,还得看看序列化反序列化。有些模糊了。。 -____-||仔细看了下.楼主你的代码ar = (AA) in.readObject(); 这句有问题... public static void rdf(String fpr,AA ar) { //这里是把你的参数赋给了局部变量ar,ar变量只是将地址指向了aa变量指向的那个对象地址 try { FileInputStream fis = new FileInputStream(fpr); ObjectInputStream in = new ObjectInputStream(fis); ar = (AA) in.readObject(); //这里.LZ将反序列得到的对象所在的地址赋给了本方法的局部变量ar.这样当本方法执行完毕后,ar就不存在了.当然也没办法找到ar所指向的内存地址 } catch (IOException e) { crtt.wrf(fpr,ar); } catch (ClassNotFoundException e) { crtt.wrf(fpr,ar); } } LZ可以追个断点.就都明白了 同意9楼调用方法传递的只是一个引用,对对象引用参数的赋值没有意义代码改如下import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class crtt { static AA aa = new AA() ; public static class AA implements Serializable { int CRF[] = new int[200]; } public static void wrf(String fpw) { try { FileOutputStream fos = new FileOutputStream(fpw); ObjectOutputStream out = new ObjectOutputStream(fos); //AA a = new AA(); out.writeObject(aa); } catch (IOException e) { e.printStackTrace(); } } public static void rdf(String fpr) { try { FileInputStream fis = new FileInputStream(fpr); ObjectInputStream in = new ObjectInputStream(fis); aa= (AA) in.readObject(); } catch (IOException e) { crtt.wrf(fpr); } catch (ClassNotFoundException e) { crtt.wrf(fpr); } } public static void main(String[] args) { String fp1 = "CS.txt"; crtt.wrf(fp1); System.out.println(aa.CRF[1]); aa.CRF[1] = 1; aa.CRF[2] = 1; crtt.wrf(fp1); crtt.rdf(fp1); System.out.println(aa.CRF[1]); System.out.println(aa.CRF[2]); } } netbeans运行正确 正常运行的朋友有没有在cmd的普通环境下试过?如果是两种开发环境下会运行出两种不同的结果,这其中的原因有没有人知道,请高人指点! eclipse 环境下测试无误,感谢楼主的源代码。 java 保持目录结构复制文件 javascript数组问题???有会的吗? 求快速加密和解密的算法? 高手请帮忙:有两个类class1和class2,为什么我在class2中想建立class1的实例但编译通不过? 大家进来帮帮我。。一个新人的问题。麻烦大家了 Java新手有一个问题,请各位大哥帮帮忙!! 请大家给个意见! protected void processWindowEvent(WindowEvent e) 一个小程序,有一句我看不懂,请帮我解释一下。谢谢了。 FileWriter(贴吧没人回~) 一篇好文,写得比较幽默,看者有分! 如何在发帖时让贴出来的代码看的舒服??
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class crtt {
static AA aa = new AA() ;
public static class AA implements Serializable {
int CRF[] = new int[200];
} public static void wrf(String fpw,AA aw) {
try {
FileOutputStream fos = new FileOutputStream(fpw);
ObjectOutputStream out = new ObjectOutputStream(fos);
//AA a = new AA();
out.writeObject(aw);
} catch (IOException e) {
e.printStackTrace();
}
} public static void rdf(String fpr,AA ar) {
try {
FileInputStream fis = new FileInputStream(fpr);
ObjectInputStream in = new ObjectInputStream(fis);
ar = (AA) in.readObject();
} catch (IOException e) {
crtt.wrf(fpr,ar);
} catch (ClassNotFoundException e) {
crtt.wrf(fpr,ar);
} } public static void main(String[] args) {
String fp1 = "D:\\javad\\CS.txt"; crtt.wrf(fp1,aa);
System.out.println(aa.CRF[1]);
aa.CRF[1] = 1;
aa.CRF[2] = 1;
crtt.wrf(fp1,aa);
crtt.rdf(fp1,aa);
System.out.println(aa.CRF[1]);
System.out.println(aa.CRF[2]);
}
}
第一次运行将建立文件,并且将内容写进去,
然后将代码改变一下,把红颜色字体的部分注销掉,编译运行,读出内容,结果还是0,0。
仔细看了下.楼主你的代码
ar = (AA) in.readObject(); 这句有问题... public static void rdf(String fpr,AA ar) { //这里是把你的参数赋给了局部变量ar,ar变量只是将地址指向了aa变量指向的那个对象地址
try {
FileInputStream fis = new FileInputStream(fpr);
ObjectInputStream in = new ObjectInputStream(fis);
ar = (AA) in.readObject(); //这里.LZ将反序列得到的对象所在的地址赋给了本方法的局部变量ar.这样当本方法执行完毕后,ar就不存在了.当然也没办法找到ar所指向的内存地址
} catch (IOException e) {
crtt.wrf(fpr,ar);
} catch (ClassNotFoundException e) {
crtt.wrf(fpr,ar);
} } LZ可以追个断点.就都明白了
调用方法传递的只是一个引用,对对象引用参数的赋值没有意义
代码改如下
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; public class crtt {
static AA aa = new AA() ;
public static class AA implements Serializable {
int CRF[] = new int[200];
} public static void wrf(String fpw) {
try {
FileOutputStream fos = new FileOutputStream(fpw);
ObjectOutputStream out = new ObjectOutputStream(fos);
//AA a = new AA();
out.writeObject(aa);
} catch (IOException e) {
e.printStackTrace();
}
} public static void rdf(String fpr) {
try {
FileInputStream fis = new FileInputStream(fpr);
ObjectInputStream in = new ObjectInputStream(fis);
aa= (AA) in.readObject();
} catch (IOException e) {
crtt.wrf(fpr);
} catch (ClassNotFoundException e) {
crtt.wrf(fpr);
} } public static void main(String[] args) {
String fp1 = "CS.txt"; crtt.wrf(fp1);
System.out.println(aa.CRF[1]);
aa.CRF[1] = 1;
aa.CRF[2] = 1;
crtt.wrf(fp1);
crtt.rdf(fp1);
System.out.println(aa.CRF[1]);
System.out.println(aa.CRF[2]);
}
}
netbeans运行正确