如果从输入流读完内容后,如果输入流不关闭,而且没有再向输入流写入新的数据,此时输入流的数据还存在么,是否是刚才那些数据

解决方案 »

  1.   

    读过之后就没有了流机制是JAVA及C++中的一个重要的机制,通过流能使我们能自由地控制包括文件,内存,IO设备等等中的数据的流向。如:可以从文件输入流中获取数据,经处理后再通过网络输出流把数据输出到网络设备上;或利用对像输出流把一个程序中的对象输出到一个格式流文件中,并通过网络流对象将其输出到远程机器上,然后在远程机器上利用对象输入流将对象还原。像这些机制是别的高级语言所不能比拟的。但要掌握好这些流对象,流的概念是很重要的。流是一串连续不继的数据的集合,就像水管一里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段一段地向数据流管道中写入数据,这些数据段会按先向顺序形成一个长的数据流。对数据的读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。在JAVA中的流按流动方向可以分为输入流及输出流两种,按流的处理位置可分为节点流和包装流。输入流,输出流是以程序为参考点来说的,所谓的输入流就是程序从中获取数据的流,输出流就是程序要其写数据的流。在输入流的一边是程序,而另一边就是流的数据源。而输出流的一边则目标,一边就是程序。其实流可以想像成是一条长河,在上游有一水库提供水源,河边住着一户人,随时都可以从河边取到水,同时,这户人也可以把一些废水倒进河里,使得废水可以流进大海。这里所提到河就是一个数据的流动通道,而水库就好比是计算机上的一切数据源,包括磁盘文件,内存,IO设备,键盘等等,JAVA提供了非常完善的输入流类来把这些数据源挂接到流上使得程序能从这些输入流中获取所需的数据。河边上的用户就是程序,它能随时随地从流中取得数据,只要有数据源挂接到这个通道上可以。而大海就是程序处理完数据后要流向的目的地,这些目的地包抱磁盘文件,内存,IO设备,显示器等,这些目的地只是相对程序来说的,它们也可能是别的进程的输入流。如下例子,将数据输出到别的文件,再从文件中读出数据File f=new File(“1.test”);Try{       FileOutputStream out=new FileOutStream(f);       Byte buf[]=”hello world”.getBytes();       Out.write(buf);       Out.close();}catch(Exception e){       System.out.println(e.getMessage());}try{
           FileInputStream in=new FileInputStream(f);       byte buf[]=new byte[1024];       int len=in.read(buf);       System.out.println(new String(buf,0,len));}catch(Exception e){
           System.out.println(e.getMessage());}