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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Shimano 中级黑马   /  2014-6-4 14:35  /  2860 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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类型写入为整数对应的字符呢?还是因为字符流中的默认编码表呢?


评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

6 个回复

倒序浏览
一点想法:
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 被强转了。



评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

回复 使用道具 举报 2 0
伍叶竹 发表于 2014-6-4 15:27
一点想法:
1、read方法的返回值是int,所以如果将接收到的read返回值打印出来,方式为字符的话需要强转, ...

恩,只要write()方法内部,强转了,就没有什么疑惑了...谢谢~~
回复 使用道具 举报
版主就是版主,学习了
回复 使用道具 举报
版主又让我加深了下理解
回复 使用道具 举报
版主的实力好强啊!
回复 使用道具 举报
思维 高级黑马 2014-7-22 11:30:36
7#
强人!果断总结到笔记本上!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马