黑马程序员技术交流社区
标题:
字符流与字节流有什么区别?
[打印本页]
作者:
于海生
时间:
2012-1-3 09:09
标题:
字符流与字节流有什么区别?
本帖最后由 于海生 于 2012-1-3 21:07 编辑
字符流与字节流有什么区别?请举例说明,详解。
作者:
李盈科
时间:
2012-1-3 09:42
字节流处理的是二进制数据,不能直接处理Unicode字符,而我们运行程序的时候是要输入字符的,这时就要用字符流了。
作者:
刘忠德
时间:
2012-1-3 09:45
字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联
作者:
想好了再写
时间:
2012-1-3 10:56
字节流以字节为单位输入输出,字节流类名含有stream,字符流以字符为单位输入输出,字节流
类名含有reader或writer.为了通用性,java中字符是16位的unicode字符,所以8位的字节流必
须和16位的字符流进行转换。字节流到字符流的转换使用InputStreamReader类:
JavaI/O字节流与字符流就是java 实现输入/输出 数据 字节流是一个字节一个字节的输入/输出 数据 (两个字节组成一个汉字)所以在用字节流读一串汉字时会出现乱码问题,
同样字符流是一个字符一个字符流(一个字符=两个字节)的输入/输出 数据 用字符流读一串汉字可以解决乱码问题.
作者:
詹英鹏
时间:
2012-1-3 10:56
字节流以字节为单位输入输出,字节流类名含有stream,处理单元为1个字节,
操作字节和字节数组。所有的InputStrem和OutputStream的子类都是。
字符流以字符为单位输入输出,处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串
java中字符是16位的unicode字符,所以8位的字节流必
须和16位的字符流进行转换。区别就看出来,就是处理数据的方式
作者:
闫玉泉
时间:
2012-1-3 12:38
我觉得字节流以字节为输入输出单位,它可以处理基本所有的媒体数据并且正解显示出来。
字符流是以字符为输入输出单位,它主要是处理文本数据,它自己可以处理字符编码的问题,在处理文本数据上功能相对较强。当然它也可以处理其它类型的数据如MP3但是会出理乱码并无法播放。
作者:
刘博
时间:
2012-1-3 13:06
字符流,字节流,不明思意, 字节流就是处理字节数据的,字符流就是处理字符数据的,也就是文本数据,而所有的文件都有字节的长度,所以字节流也可以处理字符流,但是需要转换流的感念;{:soso_e121:}
作者:
林晓波
时间:
2012-1-3 13:17
字节流 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();
作者:
王冀0127
时间:
2012-1-3 13:17
由于计算机存储任意数据都是字节, 所以字节流可以处理所有数据
当我们从设备读取数据到程序需要转为字符的时候, 或者程序要写出字符到设备中时使用字符流更为方便
如果使用字节流读数据, 读取到的是字节, 需要人工解码(将二进制码转为字符)
如果使用字节流写数据, 只能写出字节, 所以需要人工编码(将字符转为二进制码)
作者:
沈样
时间:
2012-1-3 15:04
本帖最后由 沈样 于 2012-1-3 15:05 编辑
字节流跟字符流就相当于水果跟苹果的关系,字符流是专门处理字符的,比字节流速度要快,但是字节流是所以流的基础。根据不同的场合选择不同的流,理论不是很好,如有好的理论解释请指出
作者:
苏格拉底的弟子
时间:
2012-1-3 16:46
其实在内存中的表现都不用管只要了解:字符就是一次读二个字节,而字节知识一次读一个字节
假设你现在要读一个汉字(以二个字节来存,既:一个字符)的“国”。
1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
2.用字节流读:一次读一个字节,那么你要读二次你才完全得读取到了这个汉字。不然就读取到了半个(一个汉字二个字节中的一个字节),那你说这半个(一个字节)是什么东西?她就是乱码了..我们看不懂!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2