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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于海生 黑马帝   /  2012-1-3 09:09  /  4313 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于海生 于 2012-1-3 21:07 编辑

字符流与字节流有什么区别?请举例说明,详解。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

10 个回复

正序浏览
其实在内存中的表现都不用管只要了解:字符就是一次读二个字节,而字节知识一次读一个字节
假设你现在要读一个汉字(以二个字节来存,既:一个字符)的“国”。
        1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
        2.用字节流读:一次读一个字节,那么你要读二次你才完全得读取到了这个汉字。不然就读取到了半个(一个汉字二个字节中的一个字节),那你说这半个(一个字节)是什么东西?她就是乱码了..我们看不懂!
回复 使用道具 举报
沈样 黑马帝 2012-1-3 15:04:01
10#
本帖最后由 沈样 于 2012-1-3 15:05 编辑

字节流跟字符流就相当于水果跟苹果的关系,字符流是专门处理字符的,比字节流速度要快,但是字节流是所以流的基础。根据不同的场合选择不同的流,理论不是很好,如有好的理论解释请指出
回复 使用道具 举报
由于计算机存储任意数据都是字节, 所以字节流可以处理所有数据
当我们从设备读取数据到程序需要转为字符的时候, 或者程序要写出字符到设备中时使用字符流更为方便
如果使用字节流读数据, 读取到的是字节, 需要人工解码(将二进制码转为字符)
如果使用字节流写数据, 只能写出字节, 所以需要人工编码(将字符转为二进制码)
回复 使用道具 举报
字节流 InputStream OutputStream

字符流 Reader  Writer

他们都是抽象类

具体实现
字节流 FileInputStream  FileOutputStream
字符流 FileReader    FileWriter


字节流转换成字符流可以用 InputSteamReader  OutputStreamWriter

转换成BufferdReader  BufferedWriter 他们具有缓冲区

例如:读取文件 从字节流输入到字符流输入
定义一个字节流:
Java代码     
1.        FileInputStream fileInputStream = new FileInputStream("d:/text.txt");  // 定义一个指向D:/TEXT.TXT 的字节流   
2.          
3.        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);   
4.        //字节流转换成InputStreamReader   
5.          
6.        BufferedReader bufferedReader = new BufferedReader(inputSteamReader);   
7.        //InputStreamReader 转换成带缓存的bufferedReader   


可以把读出来的内容赋值给字符
Java代码     
1.          
2.        String ss = new String();   
3.        String s;   
4.        while((s = bufferedReader.readLine())!=null){   
5.            ss += s;   
6.        }   

例如:写入文件  从字节流输出到字符流输出
Java代码     
1.          
2.        FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定义一个   
3.          
4.        指向D:/TEXT.TXT文件     
5.          
6.        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);   
7.          
8.        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);   
9.          
10.        bufferedWriter.write(s);   
11.          
12.        bufferedWriter.close();   
13.        outputStreamWriter.close();   
14.        fileOutputStream.close();

评分

参与人数 1技术分 +2 收起 理由
吴上储 + 2

查看全部评分

回复 使用道具 举报
刘博 黑马帝 2012-1-3 13:06:53
7#
字符流,字节流,不明思意,   字节流就是处理字节数据的,字符流就是处理字符数据的,也就是文本数据,而所有的文件都有字节的长度,所以字节流也可以处理字符流,但是需要转换流的感念;{:soso_e121:}
回复 使用道具 举报
我觉得字节流以字节为输入输出单位,它可以处理基本所有的媒体数据并且正解显示出来。
字符流是以字符为输入输出单位,它主要是处理文本数据,它自己可以处理字符编码的问题,在处理文本数据上功能相对较强。当然它也可以处理其它类型的数据如MP3但是会出理乱码并无法播放。
回复 使用道具 举报
字节流以字节为单位输入输出,字节流类名含有stream,处理单元为1个字节,
操作字节和字节数组。所有的InputStrem和OutputStream的子类都是。
字符流以字符为单位输入输出,处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串
java中字符是16位的unicode字符,所以8位的字节流必
须和16位的字符流进行转换。区别就看出来,就是处理数据的方式
回复 使用道具 举报

字节流以字节为单位输入输出,字节流类名含有stream,字符流以字符为单位输入输出,字节流
类名含有reader或writer.为了通用性,java中字符是16位的unicode字符,所以8位的字节流必
须和16位的字符流进行转换。字节流到字符流的转换使用InputStreamReader类:
JavaI/O字节流与字符流就是java 实现输入/输出 数据 字节流是一个字节一个字节的输入/输出 数据 (两个字节组成一个汉字)所以在用字节流读一串汉字时会出现乱码问题,
同样字符流是一个字符一个字符流(一个字符=两个字节)的输入/输出 数据 用字符流读一串汉字可以解决乱码问题.
回复 使用道具 举报
字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
字节流处理的是二进制数据,不能直接处理Unicode字符,而我们运行程序的时候是要输入字符的,这时就要用字符流了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马