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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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     }

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
字符流只能对文本文件进行读取, 他比字节流对文本文件的操作效率高
字节流主要是对非文本文件(如一些媒体文件 :图片,电影,音乐等)进行操作的
       注意:字节流可以对所有类型的文件进行操作。
如果用字节流操作文本文件,没有字符流操作文本文件 效率高。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
字节流一样可以操作 字符流可以处理的东西  只不过字符流的效率要高一些  其实字符流的底层也是字节流
所以 字节流可以这么理解 就是可以 操作所有文件

我个人理解 字符流 主要是里面有汉字的 需要去查码的  
字节流  是 音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
1、当读写文本文件时,使用字符流。因为字符流中有缓冲区,利用缓冲区进行读写更加高效。关于文本文件不光是.txt文件,像.doc、.pdf等需要用到文本的都是属于文本文件吧。这些文件与像媒体文件不同,想mp3,图片等,这些都直接二进制数字组成的。如果使用字符流读写会出现问题,只能用字节流读写(你自己可以尝试一下)。
2、你这个示例中是读写的.txt文本文件,所以可以使用字符流的缓冲区进行读写。这样更加高效。当读写的是文本文件时就可以使用字符流(我个人理解,最简单的就是当你需要使用流对象操作字符串时,就一般使用字符流),除此之外就用字节流。(可能有些废话,但实际情况就是这样{:soso_e113:})。字节流什么文件都可以读写,但是操作文本文件时就没有字符流操作高效,这也是字符流出现的原因。
其实字节流转字符流也要利用字符流的缓冲区高效的特点。
  1. import java.io.BufferedWriter;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.OutputStream;

  7. public class Test10 {
  8.        
  9.         public static void main(String[] args) throws IOException {
  10.                  /*File f = new File("d:" + File.separator+"test.txt");
  11.                   //用的字节输出流
  12.                  OutputStream out=new FileOutputStream(f);
  13.                  String str="Hello World";
  14.                  byte[] b=str.getBytes();
  15.                  for(int i=0;i<b.length;i++){
  16.                      out.write(b);
  17.                  }
  18.                  out.close();*/
  19.                 test();
  20.         }
  21.        
  22.         public static void test() throws IOException{
  23.                 File f = new File("d:" + File.separator+"test.txt");
  24.                 BufferedWriter bufw = new BufferedWriter(new FileWriter(f));
  25.                 String str="Hello World";
  26.                 bufw.write(str);  //使用字符流缓冲区更加高效。
  27.                 bufw.close();
  28.         }
  29. }
复制代码




评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
对于我们常用的GBK中,英文是占用1个字节,中文是2个。
对于UTF-8,英文是1个,中文是3个 。
对于Unicode,英文中文都是2个。
例:你现在要读一个汉字(以二个字节来存,既:一个字符)的“汉”。
        1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
        2.用字节流读:一次读一个字节,那么你要读二次你才完全得读取到了这个汉字。不然就读取到了半个(一个汉字二个字节中的一个字节),那你说这半个(一个字节)是什么东西?我想这并不是你想要的吧。
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好。
总而言之,
如果是音频文件、图片、歌曲,就用字节流好点;
如果是关系到中文(文本)的,用字符流好点 。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马