说说二进制I/O的疑问

买火柴的小男孩 2013-08-05 04:26:42
二进制I/O这一章在讲随机访问文件时(RandomFileStream)通过和其他流的对比来说明它的优点的:“到现在为止,所使用的数据流都是只读的或者只写的。这些数据流的外部文件都是顺序文件,如果不创建新文件就不能更新它们。”为什么不创建新文件就不能更新它们呀。求大神给个例子超度超度我。
...全文
185 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
好吧,没必要深究,等有时间再慢慢琢磨吧,非常感谢上面两位哥们和我探讨。
  • 打赏
  • 举报
回复
引用 6 楼 oh_Maxy 的回复:
RandomAccess [quote=引用 3 楼 u011322908 的回复:]
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();
 } 
 }
 }
可以参阅FileInputStream的源码:

public FileInputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null);
    }
实际上还是new 了File的。[/quote] RandomAccessFile的构造方法源码中也有这一句的。。。。
oh_Maxy 2013-08-05
  • 打赏
  • 举报
回复
RandomAccess
引用 3 楼 u011322908 的回复:
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();
 } 
 }
 }
可以参阅FileInputStream的源码:

public FileInputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null);
    }
实际上还是new 了File的。
小行星0906 2013-08-05
  • 打赏
  • 举报
回复
引用 楼主 u011322908 的回复:
二进制I/O这一章在讲随机访问文件时(RandomFileStream)通过和其他流的对比来说明它的优点的:“到现在为止,所使用的数据流都是只读的或者只写的。这些数据流的外部文件都是顺序文件,如果不创建新文件就不能更新它们。”为什么不创建新文件就不能更新它们呀。求大神给个例子超度超度我。
楼主,我手头资料没有你的那句话,但是我手头学习资料有这么一句话“RandomFileStream类提供了一个文件指针,用来标识要进行读写操作的下一数据的位置” 我自己对这句抽象的话理解是参照链式表,可以随时打断指向重新建立。 底层实现,猜想类似arraylist和linkedlist区别。 不一定对,我也刚学习到这块。
  • 打赏
  • 举报
回复
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();
 } 
 } 
 }
  • 打赏
  • 举报
回复
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();
 } 
 }
 }
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
要不,LZ举个例子说明下问题呗?
其实我也没遇到过这个问题,就是对这句话不是很理解,感觉我也可以不创建一个文件就更新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(); } } } 看不出有什么区别
oh_Maxy 2013-08-05
  • 打赏
  • 举报
回复
要不,LZ举个例子说明下问题呗?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧