关于流的一个问题
请问下
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在变化,实际在变化的是读取文件的指针的位置.