黑马程序员技术交流社区

标题: IO流转换问题 [打印本页]

作者: 一直有你    时间: 2013-8-3 21:24
标题: IO流转换问题
本帖最后由 杜光 于 2013-8-4 10:15 编辑

在转换流中,通过inputsteamreader类可以将字节流对象转换成字符流对象,转换

之后可以使用字符流缓冲区中的newline方法。但是在学习outputstreamwriter类

时,它意味着将字符流对象转换成字节流对象,这样的话应该变为了字节流,可是

为什么实际上还是字符流呢?


作者: 黑马李昂    时间: 2013-8-3 23:13
本帖最后由 黑马李昂 于 2013-8-3 23:15 编辑

  1. InputStream in = System.in;
  2. InputStreamReader isr = new InputStreamReader(in);
  3. BufferedReader bufr = new BufferedReader(isr);
  4. OutputStream out = System.out;
  5. OutputStreamWriter osw = new OutputStreamWriter(out);
复制代码
字节流与字符流主要的区别是他们的的处理方式一个是以流的方式输入和输出的 一个是以字节的方式输入输出字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化这两个之间InputStreamReader,OutputStreamWriter来关联,
       实际上是通过byte[]和String来关联在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的在从字节流转化为字符流时,实际上就是byte[]转化为String时,public String(byte bytes[], String charsetName)有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang而在字符流转化为字节流时,实际上是String转化为byte[]时,byte[]    String.getBytes(String charsetName)也是一样.
       java没有提供将字符流转换成字节流的转换流,字节流比字符流的使用范围更广,字节流转换成字符流只是为了处理文本内容更方便, 所以没必要把字符流转换成字节流.

      希望与楼主共同学习{:soso_e100:}


作者: 胡智    时间: 2013-8-3 23:15
比如你想复制一个图片,你用inputsteamreader将字节流转成字符流进行快速读取。想要把读出来的数据写到另外一个图片文件里去的时候,你就需要把读出来的字符流转换成字节流写入。这个时候就要用outputstreamwriter进行转换了。
作者: 米中之玉    时间: 2013-8-4 00:15
输入输出流一般都是成对出现的。
既然你是把字节流转换成字符流写入的,那你输出的话也肯定要把字符流转换成字节流输出啊。
转换流有一个特点:
1、参数是离内存远的;
2、返回结果,即返回的流是离内存近的。

所以整个过程是:
1、字节流连接数据源;
2、转换流将字节流转换为字符流,将数据写到内存;
3、将字节流与数据目的相连接;
4、将字节流作为参数传递给转换流,得到字符流,并将内存中数据读入到字符流中。

我是这么理解的,希望对你有帮助。有错的还望纠正。

输入输出流.jpg (60.52 KB, 下载次数: 12)

输入输出流.jpg





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