黑马程序员技术交流社区
标题:
字节流和字符流的问题
[打印本页]
作者:
邓海涛
时间:
2012-4-10 09:05
标题:
字节流和字符流的问题
[code][b]import java.io.FileOutputStream ;
import java.io.File ;
import java.io.OutputStream ;
public class OutputStreamDemo{
public statiic void main(String[] args)throws Exception{
File f = new File("test.txt") ;
OutputStream out = null ;
out = new FileOutputStream(f );
String str = "Hello World!" ;
byte[] b = str.getBytes() ;
out.write(b) ;
//out.close() ;
}
}[/b]
复制代码
[b]import java.io.Writer;
import java.io.File ;
import java.io.FileWriter;
public class WriterDemo{
public statiic void main(String[] args)throws Exception{
File f = new File("test.txt") ;
Writer writer= null ;
writer = new FileWriter(f );
String str = "Hello World!" ;
out.write(b) ;
//out.close() ;
}
}[/b]
复制代码
[/code]
问题是为什么第一个的文件中有内容,但是第二中没有呢?我两个程序的输出流都故意没有关闭
作者:
李敏
时间:
2012-4-10 09:18
这个是字符流和字节流的区别之一。
在输出的时候,OutputStream类即使最后没有关闭内容也可以输出。但是如果是Writer的话,则如果不关闭,最后一条内容是无法输出的,因为所有的内容都是保存在了缓冲区之中,每当调用了close()方法就意味着清空缓冲区了。
作者:
未长法
时间:
2012-4-10 10:02
IO 中数据的传递是以字节流的形式传递的
OutputStream此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。是从文件中将要输出到某个目标的“流”。
Writer用于字符流的写入和读取,也就是说写入和读取的单位是字符,他先以字节流的形式写入缓冲区,然后在缓冲区做处理封装成字符,因此只有刷新缓冲区才能写入到目的地。
作者:
金兴
时间:
2012-4-10 10:03
你的这个问题主要原因是由于字符流用到了缓冲区,而字节流没有用到缓冲区造成的.
实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件.
如图::
io.jpg
(14.01 KB, 下载次数: 34)
下载附件
字节流和字符流运行图
2012-4-10 10:00 上传
所以最后字符流要flush()一下.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2