public static class AA implements Serializable {
       int CRF[] = new int[200];
                                                }用AA内的数组作数据保存,写入文件后,为什么不能正确读出结果?有没有人遇到这样的问题?

解决方案 »

  1.   

    把代码帖出来: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。
      

  2.   

    对于序列化的数据需要实现 Serializable .对于数组对象来说,并没有实现这个功能。所以这个在序列化的时候不会传输。嗯,还得看看序列化反序列化。有些模糊了。。
      

  3.   

    -____-||
    仔细看了下.楼主你的代码
    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可以追个断点.就都明白了
      

  4.   

    同意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运行正确
      

  5.   

    正常运行的朋友有没有在cmd的普通环境下试过?如果是两种开发环境下会运行出两种不同的结果,这其中的原因有没有人知道,请高人指点!
      

  6.   

    eclipse 环境下测试无误,感谢楼主的源代码。