黑马程序员技术交流社区
标题:
字符输出流中write()方法小疑问
[打印本页]
作者:
Shimano
时间:
2014-6-4 14:35
标题:
字符输出流中write()方法小疑问
本帖最后由 Shimano 于 2014-6-5 16:20 编辑
import java.io.*;
class Demo
{
public static void main(String[] args)throws IOException
{
//创建目的地
FileWriter fw = new FileWriter("b.txt");
//与已有文件相关联
FileReader fr = new FileReader("a.txt");
int ch = 0;
while((ch=fr.read())!=-1)
{
fw.write(ch);//ch是int类型的,
//fw.write((char)ch);//一样能编译运行
//System.out.println("ch:"+ch);//打印出整数
//System.out.println("ch:"+(char)ch);//打印出整数对应字符
}
fw.close();
fr.close();
}
}
复制代码
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方法,如下:
public void write(int c) throws IOException {
synchronized (lock) {
if (writeBuffer == null){
writeBuffer = new char[writeBufferSize];
}
writeBuffer[0] = (char) c;
write(writeBuffer, 0, 1);
}
}
复制代码
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