日期:2014-05-20  浏览次数:20764 次

关于流的一个问题
请问下        
FileOutputStream   out   =   new   FileOutputStream( "wshong.txt ");
跟File   file   =   new   File( "wshong.txt ");
FileOutputStream   out   =   new   FileOutputStream(file);
这两种表达方式有什么区别的啊?
我试了,结果是一样的!

还有一个问题,FileInputStream   的一个方法read();
在下面一段程序中,
import   java.io.*;
public   class   FileStream{

        public   static   void   main(String[]   args)
        {
       
        //       File   file   =   new   File( "wsh.txt ");

              byte   b[]   =   "欢迎来到广东 ".getBytes();
              try{
             
                FileOutputStream   out   =   new   FileOutputStream( "wsh.txt ");
out.write(b);
out.close();
FileInputStream   in   =   new   FileInputStream( "wsh.txt ");
int   n   =   0;
while((n=in.read(b,0,2))!=-1)
{

    String   st   =   new   String(b,0,b.length);
    System.out.println(st);
    //下面搞不懂了,能帮我解释下下面的工作原理吗?
    String   str   =   new   String(b,0,n);
  System.out.println(str);
 
}
              }catch(IOException   e)
              {
                  e.printStackTrace();
              }
        }
}
这个程序打印出来的结果是




广


但是我搞不懂为什么会这样
    String   str   =   new   String(b,0,n);
这句话中的b有改变的么?是不是每次read(b,0,2)后,b自动右移;
但是我把每次的b打印出来,发现还是原来那句话 "欢迎来到广东 ",郁闷了


------解决方案--------------------
1。这两种方法只是采用了构造重载没有区别的。

2。read() 每次读取后,都会往右移的,b 是不会移动的 b,只是一个字节数组,是从文件中读取出来的,移动的只是文件指针,n 是读取出来的字节数量。

------解决方案--------------------
FileOutputStream out = new FileOutputStream( "wshong.txt ");
跟File file = new File( "wshong.txt ");
FileOutputStream out = new FileOutputStream(file);
这两种表达方式有什么区别的啊?
----------------------
没有区别


while((n=in.read(b,0,2))!=-1)//每次都从第0个单元开始,读最多两个byte到b里面,读入的具体byte数返回给n
{
String st = new String(b,0,b.length);
System.out.println(st);//把b的类容打印出来
String str = new String(b,0,n);
System.out.println(str);//把b的前n个单元构造的字符串打印出来(按LZ的数据来所,n始终是2,也就是刚刚读取的那个汉字)
}
------解决方案--------------------
没有区别.但最好用第二种办法.
可操作性比较好.
结果都是一样的.
------解决方案--------------------
UP
------解决方案--------------------
1.FILEOUTPUTSTREAM的2个方法实现是一样的.new FileOutputStream(String str);是先把参数String转换为一个文件,然后再打开读.

2.byte[] b是个中间容器,每次读的时候都取0~2个byte存放到b里面,你也可以理解为下一次存放的内容把上一次存放的内容覆盖了,看起来好象是b在变化,实际在变化的是读取文件的指针的位置.