黑马程序员技术交流社区
标题:
操作文件什么时候用字符流或者字节流?
[打印本页]
作者:
黑马张丽
时间:
2013-12-27 13:57
标题:
操作文件什么时候用字符流或者字节流?
1.在学习中,老师说关系到文本的话用字符流,请问他指的文本文件是后缀名为.txt的么?
2.如果是的话,为什么如下这里用的是字节流?到底什么时候用字节流什么时候用字符流?最好是自己理解的说,有些混淆了我。
public
static
void
main(String[] args)
throws
IOException {
8
File f =
new
File("d:" + File.separator+"test.txt");
//用的字节输出流
9
OutputStream out=
new
FileOutputStream(f);
10
String str="Hello World";
11
byte
[] b=str.getBytes();
12
for
(
int
i=0;i<b.length;i++){
13
out.write(b
);
14
}
15
out.close();
16
}
作者:
闫志军
时间:
2013-12-27 14:08
字符流只能对文本文件进行读取, 他比字节流对文本文件的操作效率高
字节流主要是对非文本文件(如一些媒体文件 :图片,电影,音乐等)进行操作的
注意:字节流可以对所有类型的文件进行操作。
如果用字节流操作文本文件,没有字符流操作文本文件 效率高。
作者:
75100313
时间:
2013-12-27 14:37
字节流一样可以操作 字符流可以处理的东西 只不过字符流的效率要高一些 其实字符流的底层也是字节流
所以 字节流可以这么理解 就是可以 操作所有文件
我个人理解 字符流 主要是里面有汉字的 需要去查码的
字节流 是 音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
作者:
松毛
时间:
2013-12-27 14:41
1、当读写文本文件时,使用字符流。因为字符流中有缓冲区,利用缓冲区进行读写更加高效。关于文本文件不光是.txt文件,像.doc、.pdf等需要用到文本的都是属于文本文件吧。这些文件与像媒体文件不同,想mp3,图片等,这些都直接二进制数字组成的。如果使用字符流读写会出现问题,只能用字节流读写(你自己可以尝试一下)。
2、你这个示例中是读写的.txt文本文件,所以可以使用字符流的缓冲区进行读写。这样更加高效。当读写的是文本文件时就可以使用字符流(我个人理解,最简单的就是当你需要使用流对象操作字符串时,就一般使用字符流),除此之外就用字节流。(可能有些废话,但实际情况就是这样{:soso_e113:})。字节流什么文件都可以读写,但是操作文本文件时就没有字符流操作高效,这也是字符流出现的原因。
其实字节流转字符流也要利用字符流的缓冲区高效的特点。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
public class Test10 {
public static void main(String[] args) throws IOException {
/*File f = new File("d:" + File.separator+"test.txt");
//用的字节输出流
OutputStream out=new FileOutputStream(f);
String str="Hello World";
byte[] b=str.getBytes();
for(int i=0;i<b.length;i++){
out.write(b);
}
out.close();*/
test();
}
public static void test() throws IOException{
File f = new File("d:" + File.separator+"test.txt");
BufferedWriter bufw = new BufferedWriter(new FileWriter(f));
String str="Hello World";
bufw.write(str); //使用字符流缓冲区更加高效。
bufw.close();
}
}
复制代码
作者:
duanyoujiji
时间:
2013-12-28 11:14
对于我们常用的GBK中,英文是占用1个字节,中文是2个。
对于UTF-8,英文是1个,中文是3个 。
对于Unicode,英文中文都是2个。
例:你现在要读一个汉字(以二个字节来存,既:一个字符)的“汉”。
1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
2.用字节流读:一次读一个字节,那么你要读二次你才完全得读取到了这个汉字。不然就读取到了半个(一个汉字二个字节中的一个字节),那你说这半个(一个字节)是什么东西?我想这并不是你想要的吧。
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好。
总而言之,
如果是音频文件、图片、歌曲,就用字节流好点;
如果是关系到中文(文本)的,用字符流好点 。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2