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

io的一个问题
问个问题:我向一个文件中的内容用FileInputStream的read()方法一个字节一个字节读取(比如文件中有111111这几个字符),然后用system.out的write方法将文件中的内容在屏幕上输出:
FileInputStream fis=new FileInputStream("1.txt");
int data;
while((data=fis.read())!=-1)
{
  System.out.write(data);
}
可是这样就是不能在屏幕上显示出来,但是如果我用字节数组存取,
byte[] buf=new byte[100];
int len=fis.read(buf);
System.out.write(buf,0,len);
这样就能在屏幕上显示出来,不知道为什么,希望哪位大哥给我解答一下!

------解决方案--------------------
用System.out.println()试一试
http://www.10zhizui.cn
------解决方案--------------------
关注
------解决方案--------------------
System.out.write(data); 
这点的问题``你的代码不规范``
------解决方案--------------------
我知道System.in和System.out有这个问题,想不到自己生成一个文件流也存在这个问题。System.in和System.in有这个问题,可以解释为系统资源共享的问题,也就是System.in获得控制台资源后,System.out就必须等待,直到System.in释放资源,反过来一样。从操作系统级别来看,System.in和System.out也是一种文件(操作系统都把一切资源当作文件看待来管理的),从System的源代码来看,其实System.in和System.out也是一个FileInpputStream,所以是不是自己生成的文件流也有这样的制约。我这里也只是猜测,LZ可以写段代码测试一下,自己生成的两个文件流分别读写,看看是否也有这样的约束。比如
FileInputStream fis=new FileInputStream( "1.txt "); 
FileOutputStream fos = new FileOutputStream("2.txt");
int data; 
while((data=fis.read())!=-1) 

//System.out.write(data); 
fos.write(data);

在fos.write(data);设置个断点,在文件读完以前,手动用notepad打开2.txt看看,是不是有数据输出了。
以前还真没这样试过,所以有这样的怀疑。




------解决方案--------------------
在System.out.write(data);后面加一句System.out.flush();就行了
原因是没有刷新输出流