黑马程序员技术交流社区

标题: 字节流和字符流的问题 [打印本页]

作者: 邓海涛    时间: 2012-4-10 09:05
标题: 字节流和字符流的问题
  1. [code][b]import java.io.FileOutputStream ;
  2. import java.io.File ;
  3. import java.io.OutputStream ;
  4. public class OutputStreamDemo{
  5.      public statiic void main(String[] args)throws Exception{
  6.           File f = new File("test.txt") ;
  7.           OutputStream out = null ;
  8.           out = new FileOutputStream(f );
  9.           String str = "Hello World!" ;
  10.           byte[] b = str.getBytes() ;
  11.           out.write(b) ;
  12.           //out.close() ;
  13.      }
  14. }[/b]
复制代码
  1. [b]import java.io.Writer;
  2. import java.io.File ;
  3. import java.io.FileWriter;
  4. public class WriterDemo{
  5.      public statiic void main(String[] args)throws Exception{
  6.           File f = new File("test.txt") ;
  7.           Writer writer= null ;
  8.           writer = new FileWriter(f );
  9.           String str = "Hello World!" ;
  10.           out.write(b) ;
  11.           //out.close() ;
  12.      }
  13. }[/b]
复制代码
[/code]

问题是为什么第一个的文件中有内容,但是第二中没有呢?我两个程序的输出流都故意没有关闭
作者: 李敏    时间: 2012-4-10 09:18
这个是字符流和字节流的区别之一。
在输出的时候,OutputStream类即使最后没有关闭内容也可以输出。但是如果是Writer的话,则如果不关闭,最后一条内容是无法输出的,因为所有的内容都是保存在了缓冲区之中,每当调用了close()方法就意味着清空缓冲区了。
作者: 未长法    时间: 2012-4-10 10:02
IO 中数据的传递是以字节流的形式传递的
        OutputStream此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。是从文件中将要输出到某个目标的“流”。
        Writer用于字符流的写入和读取,也就是说写入和读取的单位是字符,他先以字节流的形式写入缓冲区,然后在缓冲区做处理封装成字符,因此只有刷新缓冲区才能写入到目的地。
作者: 金兴    时间: 2012-4-10 10:03
你的这个问题主要原因是由于字符流用到了缓冲区,而字节流没有用到缓冲区造成的.
实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件.
如图::

所以最后字符流要flush()一下.





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2