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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

怎么使用OutputStreamWriter,InputStreamReader这些流,使用原则是什么?有什么主意事项

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-28 20:48

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

正序浏览
楼主你好

InputStreamReader

  当创建了一个字节输入流的时候, 读取字符数据需要人工解码, 非常麻烦, 我们可以使用InputStreamReader从一个字节流中读取字符数据.
  使用构造函数InputStreamReader(InputStream in)包装一个字节输入流, 调用read()方法可以直接读取字符
  如果需要指定码表, 可以使用InputStreamReader(InputStream in, String charsetName)

      类(InputStreamReader)--继承自Reader
         字符输入流
      当创建了一个字节输入流的时候, 读取字符数据需要人工解码, 非常麻烦,
      我们可以使用InputStreamReader从一个字节流中读取字符数据.
      使用构造函数InputStreamReader(InputStream in)包装一个字节输入流, 调用read()方法可以直接读取字符
      如果需要指定码表, 可以使用InputStreamReader(InputStream in, String charsetName)
     类(FileReader)--继承自InputStreamReader
      FileReader是InputStreamReader的子类, 如果读取一个平台默认编码的文本文件, 就可以使用FileReader
      写法区别:
     new FileReader("文件名");
      new InputStreamReader(new FileInputStream("文件名"));

OutputStreamWriter
  
  当创建了一个字节输出流的时候, 写出字符数据需要人工编码, 也很麻烦, 我们可以使用OutputStreamWriter向一个字节流中写出字符数据.
  使用构造函数OutputStreamWriter(OutputStream out)包装一个字节输出流, 调用write(String)方法可以直接写出字符
  如果需要指定码表, 可以使用OutputStreamWriter(OutputStream out, String charsetName)

         类(OutputStreamWriter)继承自Writer
            字符输出流
         当创建了一个字节输出流的时候, 写出字符数据需要人工编码, 也很麻烦,
         我们可以使用OutputStreamWriter向一个字节流中写出字符数据.
      使用构造函数OutputStreamWriter(OutputStream out)包装一个字节输出流, 调用write(String)方法可以直接写出字符
      如果需要指定码表, 可以使用OutputStreamWriter(OutputStream out, String charsetName)
        类(FileWriter)继承自OutputStreamWriter
      FileWriter是OutputStreamWriter的子类, 如果写出一个平台默认编码的文本文件, 就可以使用FileWriter
      写法区别:
       new FileWriter("文件名");
       new OutputStreamWriter(new FileOutputStream("文件名"));
      ②类(BufferedWriter)--继承自Reader
      BufferedWriter中提供了跨平台写出换行的功能
      ③类(CharArrayWriter)--继承自Reader
      ④类(PrintWriter)--继承自Reader
      ⑤类(StringWriter)--继承自Reader




回复 使用道具 举报
OutputStreamWriter,InputStreamReader这两个流是字符流与字节流需要转换时使用的,这两个转换流可以让你更改默认的编码表,进而使用别的编码表,当你读取或者写入的数据与你默认的编码表不一样,你就需要使用这两个转换流了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
OutputStreamWriter:是Writer的子类将输出的字符流变为字节流即将一个字符流的输出对象变为字节流输出对象;
InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象;
如果以文件操作为例.则内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件中,读取时需要将读入的字节流通过InputStreamReader变为字符流.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 苏冉 于 2013-3-28 18:05 编辑

场合不同,使用的方法也不同。
FileReader,FileWriter 是读字符的,1个字符是2个字节,16位
OutputStream ,InputStream是读字节的,1个字节是8位
你要是读汉字,一个汉字是2个字节,你用InputStream读会拆分汉字,很麻烦,可以写程序验证下
字符流主要读文本,比较有效率
字节流主要读二进制文件,图片 ,就是为了防止出现读取的单位放大,出现无法还原本程序的现象
InputStreamReader可以把文件按字节读取,然后按照UTF-8的格式编码显示,对原字节进行再编码过程

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马