黑马程序员技术交流社区

标题: 关于java流的问题 [打印本页]

作者: 曾辉    时间: 2012-2-19 00:53
标题: 关于java流的问题
字节流与字符流,为什么要用转换流,把字节转换成字符流,为什么不直接用字符流?

作者: 左华清    时间: 2012-2-19 01:11
看是操作什么文件吧.
文本文件用字符流,其他的用字节流
作者: 蒙武辉    时间: 2012-2-19 01:33
这是因为有一些时候系统给你提供的只有字节流,比如说System.in标准输入流。就是字节流。你想从他那里得到用户在键盘上的输入,只能是以转换流将它转换为Reader以方便自己的程序读取输入。再比如说Socket里的getInputStream()很明显只给你提供字节流,你要不行直接用,就得给他套个InputStreamReader()用来读取。网络传输来的字符。

作者: 何招俊    时间: 2012-2-19 09:09
1)字节流和字符流还是有区别的:字节主要是读一些如音乐文件、视频文件(可以理解那些比较细腻精度要求高的文件),而字符流就相对宽松一些了:如文本文件…… 
2)flush() 是刷新的意思,就是把缓冲区里的数据给提交输出流里然后输出; close()是关闭输出流,在关闭之前会做一次刷新!所以你只要有close()也相当于刷新后提交数据了!

作者: 邱纲    时间: 2012-2-19 09:39
字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
例如:图片、mp3,电影,视频等等,它们都是二进制数据。
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的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