二进制I/O这一章在讲随机访问文件时(RandomFileStream)通过和其他流的对比来说明它的优点的:“到现在为止,所使用的数据流都是只读的或者只写的。这些数据流的外部文件都是顺序文件,如果不创建新文件就不能更新它们。”为什么不创建新文件就不能更新它们呀。求大神给个例子超度超度我。

解决方案 »

  1.   

    其实我也没遇到过这个问题,就是对这句话不是很理解,感觉我也可以不创建一个文件就更新FileOutputStream和FileInputStream呀,比方说下面代码:
    import java.io.*;
    public class TestFileStream {
    public static void main(String[] args){
    int[] a= new int[10];
    try{
    FileInputStream input = new FileInputStream("test.dat");
            FileOutputStream output = new FileOutputStream("test.dat");         for(int i=0;i<10;i++){
    output.write(i);
        }
        output.close();
        int value;
        while((value=input.read())!=-1){
         System.out.println(value);
        }
        input.close();
    }catch(IOException ex){
    ex.printStackTrace();
    }
    }
    }
    如果是用RandomAccessFile的话应该这么写:
    import java.io.*;
    public class IO {
    public void main(String[] args){
    int[] a= new int[10];
    try{
    RandomAccessFile file = new RandomAccessFile("test.dat","rw");

        for(int i=0;i<10;i++){
    file.write(i);
        }
        int value;
        file.seek(0);
        while((value=file.read())!=-1){
         System.out.println(value);
        }
        file.close();
    }catch(IOException ex){
    ex.printStackTrace();
    }
    }
    }
    看不出有什么区别
      

  2.   

    import java.io.*;
     public class TestFileStream {
     public static void main(String[] args){
     int[] a= new int[10];
     try{
     FileInputStream input = new FileInputStream("test.dat");
             FileOutputStream output = new FileOutputStream("test.dat");         for(int i=0;i<10;i++){
     output.write(i);
         }
         output.close();
         int value;
         while((value=input.read())!=-1){
          System.out.println(value);
         }
         input.close();
     }catch(IOException ex){
     ex.printStackTrace();
     } 
     }
     }
      

  3.   

    import java.io.*;
     public class IO {
     public void main(String[] args){
     int[] a= new int[10];
     try{
     RandomAccessFile file = new RandomAccessFile("test.dat","rw");     for(int i=0;i<10;i++){
     file.write(i);
         }
         int value;
         file.seek(0);
         while((value=file.read())!=-1){
          System.out.println(value);
         }
         file.close();
     }catch(IOException ex){
     ex.printStackTrace();
     } 
     } 
     }
      

  4.   


    楼主,我手头资料没有你的那句话,但是我手头学习资料有这么一句话“RandomFileStream类提供了一个文件指针,用来标识要进行读写操作的下一数据的位置”我自己对这句抽象的话理解是参照链式表,可以随时打断指向重新建立。
    底层实现,猜想类似arraylist和linkedlist区别。不一定对,我也刚学习到这块。
      

  5.   

    RandomAccess可以参阅FileInputStream的源码:public FileInputStream(String name) throws FileNotFoundException {
            this(name != null ? new File(name) : null);
        }实际上还是new 了File的。
      

  6.   

    可以参阅FileInputStream的源码:public FileInputStream(String name) throws FileNotFoundException {
            this(name != null ? new File(name) : null);
        }实际上还是new 了File的。
    RandomAccessFile的构造方法源码中也有这一句的。