黑马程序员技术交流社区

标题: io中字符流相对于字节流的优点是? [打印本页]

作者: 追梦天涯33    时间: 2015-9-10 19:26
标题: io中字符流相对于字节流的优点是?


作者: XiaoQiang_1    时间: 2015-9-10 19:26
对于字节流来说,字符流的应用大大减少了出现乱码的问题;再加上可以使用转换就更加方便了
作者: 水果牛牛    时间: 2015-9-10 21:19
直接对字符进行操作,很方便
作者: lknum1    时间: 2015-9-10 23:03
读取文本文件,因为是读取字符,效率高,但是对于媒体文件就只能用字节
作者: Adualtbird    时间: 2015-9-10 23:06
字符流在运行的时候把字符串的字节数据转换成了字符,可以直接操作字符文件,而字符文件可以整合读取和写入,而不需要一个字符串数组作为缓冲容器,加快了对字符串数据的操作效率!我是这么理解的
作者: 肖天长    时间: 2015-9-10 23:41
忘了
作者: 宋美涛    时间: 2015-9-10 23:42
在学习java的io流中 经常用到FileOutStream 、FileInputStream和 FileReader、FileEWiter 分别对应的是字节流和字符流



一般情况下读取中文需要用字符流,因为在字节流一个汉字被看做一个字符。



流是一个有序的字节序列,可作为一个输入源,也可作为一个输出的目的地。
字节流以字节为单位输入输出,字节流类名含有stream,字符流以字符为单位输入输出,字节流
类名含有reader或writer.为了通用性,java中字符是16位的unicode字符,所以8位的字节流必
须和16位的字符流进行转换。字节流到字符流的转换使用InputStreamReader类:
public InputStreamReader(InputStream in);
public InputStreamReader(InputStream in,String encoding);
public OuputStreamWriter(OnputStream in);
public OnputStreamWriter(OnputStream in,String encoding);



Reader和Writer类允许用户在程序中无缝的支持国际字符集,如果要读区的文件是别国语言,
要使用字符流。
JavaI/O字节流与字符流就是java 实现输入/输出 数据 字节流是一个字节一个字节的输入/输出 数据 (两个字节组成一个汉字)所以在用字节流读一串汉字时会出现乱码问题,
同样字符流是一个字符一个字符流(一个字符=两个字节)的输入/输出 数据 用字符流读一串汉字可以解决乱码问题.



字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的

在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang
而在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[]    String.getBytes(String charsetName)
也是一样的道理



按kilojin的说法,字符流的传输效率比字节流的高.
作者: xinchi    时间: 2015-9-11 09:17
各有各的用处,没有可比性
作者: Java_EE    时间: 2015-9-11 22:48
顶一个,
作者: Yan_Theo    时间: 2015-9-11 23:34
字符流是字节流+相应的编码,是为了便于操作字符的,字节流本身也可以传输字符但要进行编码解码操作,字符流就是为了简化这个过程的。
作者: Surprise    时间: 2015-9-12 09:43
字符流可以用文本txt直接显示出可读的信息,而字节流里面存放的是字节数据,如果用GBK或者UTF-8编码表读取无效。我的理解是字符流是针对各国不同文字而设的
作者: yanmingwang    时间: 2015-9-12 15:58
首先从java的字符与字节理解,java中的一个字符由2个字节组成。因此大部分的说法是用于文本文件时,使用的是字符流,而大文件,如一些流体媒文件,用的是字节流。但是实际可理解的是,字节流在操作时本身不会用到缓冲区,是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。两者从效率来说大大的不同。
作者: 丶不缺小哥范儿    时间: 2015-9-13 00:50
字符流的应用大大减少了出现乱码
作者: heshiwei    时间: 2015-9-13 18:07
字符流和字节流,他们的本质是一样的,字符流的本质也是字节流,只不过字符类有自己的编码表,能通过系统默认的编码表把字节数据转换为字符数据。
当然,你所说的字符流的最直接的优点就是可以调用write(String str) 、 readLine()等方法直接操作字符串。
对于非字符串的数据,字符流没有任何优势。

字节流适合读取通用的数据文件,将它们当做字节读取,当然速度上胜于字符流
作者: 夸克    时间: 2015-9-14 00:19
肖天长 发表于 2015-9-10 23:41
忘了

哈哈哈哈你怎么这么逗
作者: 菊花爆满山    时间: 2015-9-15 22:32
优点:就是操作文本文件的时候 字符流好于字节流。
对于其他文件 图片 电影 音乐 等二进制文件 还是字节流。
在开发中,字节流应用更广泛。
作者: 芝麻糊    时间: 2015-9-16 22:58
操作文本文件效率较高
作者: 那风景如花    时间: 2015-9-18 17:08
字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的

在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang
而在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[]    String.getBytes(String charsetName)
也是一样的道理




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