黑马程序员技术交流社区

标题: 字符输出流中write()方法小疑问 [打印本页]

作者: Shimano    时间: 2014-6-4 14:35
标题: 字符输出流中write()方法小疑问
本帖最后由 Shimano 于 2014-6-5 16:20 编辑
  1. import java.io.*;
  2. class Demo
  3. {
  4.         public static void main(String[] args)throws IOException
  5.         {
  6.                 //创建目的地
  7.                 FileWriter fw = new FileWriter("b.txt");
  8.                 //与已有文件相关联
  9.                 FileReader fr = new FileReader("a.txt");
  10.                 int ch = 0;
  11.                
  12.                 while((ch=fr.read())!=-1)
  13.                 {               
  14.                         fw.write(ch);//ch是int类型的,
  15.                         //fw.write((char)ch);//一样能编译运行
  16.                         //System.out.println("ch:"+ch);//打印出整数
  17.                         //System.out.println("ch:"+(char)ch);//打印出整数对应字符
  18.                 }
  19.                
  20.                 fw.close();
  21.                 fr.close();
  22.         }
  23. }
复制代码
read()方法:
返回:作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),
          如果已到达流的末尾,则返回 -1
write(int c)
参数:c - 指定要写入字符的 int。

我想问的是为什么打印在控制台上,就需要把int类型的ch强转为char,否则打印出字符对应的整数。
而write方法写入到指定文件中时,写入的是int类型的,生成文件时显示的还是字符类型的数据。

是不是write方法直接将int类型写入为整数对应的字符呢?还是因为字符流中的默认编码表呢?



作者: 轻语。    时间: 2014-6-4 15:27
一点想法:
1、read方法的返回值是int,所以如果将接收到的read返回值打印出来,方式为字符的话需要强转,这一点木有疑惑了。
2、硬要探讨为什么write方法传入的是int,打开被写入的文件变成了字符,我翻了Writer类中写入单字符的write方法,如下:

  1.    public void write(int c) throws IOException {
  2.         synchronized (lock) {
  3.             if (writeBuffer == null){
  4.                 writeBuffer = new char[writeBufferSize];
  5.             }
  6.             writeBuffer[0] = (char) c;
  7.             write(writeBuffer, 0, 1);
  8.         }
  9.     }
复制代码
writeBuffer[0] = (char) c;关键代码就是这句,so ez( 简单),传进去的int 被强转了。




作者: Shimano    时间: 2014-6-4 16:35
伍叶竹 发表于 2014-6-4 15:27
一点想法:
1、read方法的返回值是int,所以如果将接收到的read返回值打印出来,方式为字符的话需要强转, ...

恩,只要write()方法内部,强转了,就没有什么疑惑了...谢谢~~
作者: jiang_ming    时间: 2014-6-4 18:15
版主就是版主,学习了
作者: crazystraw    时间: 2014-6-4 19:59
版主又让我加深了下理解
作者: yinxjfly    时间: 2014-6-4 21:06
版主的实力好强啊!
作者: 思维    时间: 2014-7-22 11:30
强人!果断总结到笔记本上!




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