黑马程序员技术交流社区

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

作者: madianguo    时间: 2012-11-15 12:31
标题: 转换流的问题
本帖最后由 madianguo 于 2012-11-15 23:19 编辑

BufferedReader br = new BufferedReader(new(InputStreamReader("System.in"));
我想把键盘上录入的数据录入到abc.txt中,在读取中我需要把System.in转换成字符流,
我写入的是纯文本还需不需要把字符流转换成字节流了?在写入时我采取下列哪种方法呢?
方法一:BufferedWriter bw = new BufferedWriter(new(OutputStreamWriter("abc.txt")));
方法二:BufferedWriter bw = new BufferedWriter(new FileWriter("abc.txt"));

作者: 邵天强    时间: 2012-11-15 13:01
可以这样分析:
你的需求:想把键盘录入的数据存储到一个文件中,为纯文本的
可以通过缓冲流BufferedReader,而用键盘输入的(System.in)为字节流,所以需要把字节流转换成字符流(InputStreamReader)
源:键盘录入( BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)))
目标:文件(BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("abc.txt"))))
package com.heima.reflect;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Example{
    public static void main(String[] args) throws Exception{
        BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//获取一个输入流
        //获取一个输出流
        BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("abc.txt")));
        String line=null;
        while((line=bufr.readLine())!=null){//一行一行的读
         
          bufw.write(line);//把从键盘中读取的数据写到abc.txt文件中
          bufw.newLine();//回车换行
          if("over".equalsIgnoreCase(line)){//如果遇到over则停止录入
           break;
          }
          bufw.flush();//刷新
         
         
        }
        bufw.close();//关闭输出流
        bufr.close();//关闭输入流
    }
}



作者: 王永荣    时间: 2012-11-15 16:36
我写入的是纯文本还需不需要把字符流转换成字节流了?在写入时我采取下列哪种方法呢?
方法一:BufferedWriter bw = new BufferedWriter(new(OutputStreamWriter("abc.txt")));
方法二:BufferedWriter bw = new BufferedWriter(new FileWriter("abc.txt"));

写入的是纯文本,当然用的是字符流啦。毕老师视频里的需求分析,不是写的很明确吗?
1,明确源和目的。
        源:输入流。InputStream  Reader
        目的:输出流。OutputStream  Writer。
2,操作的数据是否是纯文本。
        是:字符流。
        不是:字节流。

3,当体系明确后,在明确要使用哪个具体的对象。
        通过设备来进行区分:
        源设备:内存,硬盘。键盘
        目的设备:内存,硬盘,控制台。


作者: madianguo    时间: 2012-11-15 20:05
王永荣 发表于 2012-11-15 16:36
写入的是纯文本,当然用的是字符流啦。毕老师视频里的需求分析,不是写的很明确吗?

...

我比较纳闷的是字节流是成对出现的(就是读取的时候字节流转换成字符流,在写入的时候字符流转换成字节流,保持读取和写入的一致),还是只要保证程序的要求(最后写入的是纯文本就直接以字符流的方式输出,而不用转换成字节流吗)?
作者: 王永荣    时间: 2012-11-15 21:39
madianguo 发表于 2012-11-15 20:05
我比较纳闷的是字节流是成对出现的(就是读取的时候字节流转换成字符流,在写入的时候字符流转换成字节流 ...

我的理解:操作纯文本文件,转不转换流对结果是没什么影响的。。。只是从执行效率方面来说有需要。
读入时:字节流转成字符流,主要是为了读取数据方便,因为一般地,都用BufferedReader来按行读取文本文件,效率高。
输出时:选择字符流还是字节流输出,还是一般地,选用字符流的BufferedWriter高效一些。
所以,视频里总结说,是纯文本,就选用字符流。
结论老师已经给了,不要考虑那么多啦。:loveliness:





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