A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓海涛 中级黑马   /  2012-4-10 09:05  /  1676 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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]

问题是为什么第一个的文件中有内容,但是第二中没有呢?我两个程序的输出流都故意没有关闭

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
这个是字符流和字节流的区别之一。
在输出的时候,OutputStream类即使最后没有关闭内容也可以输出。但是如果是Writer的话,则如果不关闭,最后一条内容是无法输出的,因为所有的内容都是保存在了缓冲区之中,每当调用了close()方法就意味着清空缓冲区了。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
IO 中数据的传递是以字节流的形式传递的
        OutputStream此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。是从文件中将要输出到某个目标的“流”。
        Writer用于字符流的写入和读取,也就是说写入和读取的单位是字符,他先以字节流的形式写入缓冲区,然后在缓冲区做处理封装成字符,因此只有刷新缓冲区才能写入到目的地。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
你的这个问题主要原因是由于字符流用到了缓冲区,而字节流没有用到缓冲区造成的.
实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件.
如图::

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

评分

参与人数 1技术分 +2 收起 理由
贠(yun)靖 + 2 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马