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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 平凡成就非凡 中级黑马   /  2014-3-12 17:26  /  1284 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字节流和字符流有什么区别?

8 个回复

倒序浏览
本帖最后由 胡文彬 于 2014-3-12 17:44 编辑

字节流: 8个比特封装成一个字节,在硬盘,内存,所有能存储数据的设备中,数据都是以比特流形式。后来,欧美习惯,将8个比特封装成一个字节(现在 cpu 一般一次处理4*8比特,也就是4个字节),用Ascii码表进行对照,计算机中都内置一张acsii码表,ascii码表中有一些内容如:A 设为0000 1001,当计算机读到0000 1001时(设计算机在运行获取字母的数据的软件),计算机会跳用ascii码字库,将A的位图显示在对应的显示屏上。字符流是对字节的封,使用GBK编码表是,将两个字节封装成一个字符,计算机内置一张GBk码表字符。相应的软件运行时,会将两个字节对应的字符取出来》总结: 字符流=字节+编码表

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
ς高眼光の目标 来自手机 中级黑马 2014-3-12 19:03:51
藤椅
简单理解,字节可以作用图片等,字符不可以
回复 使用道具 举报
主要的区别是他们的的处理方式 字节流是最基本的,采用ASCII编码,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的 但实际中很多的数据是文本,又提出了字符流的概念,采用Unicode编码.它是按虚拟机的encode来处理,也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联, 你只要把java处理字节流和字符流的类搞清楚就行了!   
回复 使用道具 举报
字节流与字符流主要的区别是他们的的处理方式 字节流是最基本的,采用ASCII编码,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的 但实际中很多的数据是文本,又提出了字符流的概念,采用Unicode编码.它是按虚拟机的encode来处理,也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联 你只要把java处理字节流和字符流的类搞清楚就行了!   

点评

不要重复回复  发表于 2014-3-12 19:26
回复 使用道具 举报
最大的区别字符流内置编码表,也可以指定
回复 使用道具 举报
字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件.
字节流再操作数据时不论是读取还是写入,都是按字节为单位,即当字节流获得一个字节后就会输出或读入,这种操作数据的方法效率很低,例如我们要将c盘中的一个文件复制到d盘中的文件中,使用字节流则会频繁使系统读取或写入硬盘的操作即在c盘文件处读取一个字节然后写入到d盘的文件中,这就使硬盘的指针来回走动并且每次都需要重新定位,这是很费时的。为了提高效率字符流则应运而生,它的本质还是使用字节流的方法,但区别在于不是没读取到一个字节就输出或写入,而是定义了一个数组,先存放到这个数组中,当这个数组被放满后再一次性读取或写入,这就大大节省了在硬盘上因指针定位而造成的费时。

评分

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

查看全部评分

回复 使用道具 举报
字节流与字符流主要的区别是他们的的处理方式

流分类:
1.Java的字节流
   InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
2.Java的字符流
  Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new



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

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

至于java.io中还出现了许多其他的流,按主要是为了提高性能和使用方便,
如BufferedInputStream,PipedInputStream等

评分

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

查看全部评分

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