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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suiabing 中级黑马   /  2012-4-29 21:35  /  2663 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 隋丙跃 于 2012-4-30 00:11 编辑

void
write(int c)
          写入单个字符。

今天看了IO,里面有个方法write,注释是写入单个字符,但是参数却是int类型的,为啥子呢,如果我们要写入一个字符a 难道还要写入97吗?


7 个回复

倒序浏览
class  BufferedWriterDemo
{
        public static void main(String[] args) throws IOException
        {
                //创建一个字符写入流对象。
                FileWriter fw = new FileWriter("D:\\buf.txt");

                //为了提高字符写入流效率。加入了缓冲技术。
                //只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
                BufferedWriter bufw = new BufferedWriter(fw);

                for(int x=1; x<5; x++)
                {
                        bufw.write(97+x);//a的ASCII码是97,所以里面的参数是int类型是按ASCII码来算的
                        bufw.newLine();
                        bufw.flush();
                }

                //记住,只要用到缓冲区,就要记得刷新。
                //bufw.flush();

                //其实关闭缓冲区,就是在关闭缓冲区中的流对象。
                bufw.close();


        }
}
打印的是
b
c
d
e
public void write(int c)
           throws IOException写入单个字符。

覆盖:
类 Writer 中的 write
参数:
c - 指定要写入字符的 int。
回复 使用道具 举报
char 类型数据的取值范围为 0 ~ 65535 ,也就是说 char 类型数据是取不到负值的;int 类型数据的取值范围为 -2147483648 ~ 2147483647 ,可以取到负值;同时 int 的取值范围又包含 char 的取值范围,这就为使用 int 作为返回值类型提供了可能,因为流需要一个特殊的值来表示流末尾,这个值不应该在 char 的取值范围内,如果使用 char 取值范围内的值作为流末尾标志,那么这个值同样有可能出现在数据流中间作为数据来传输,流在读到这个值的时候会认为已经到达流末尾,后面未读取的数据将被截断。所以 Java 中选择了使用 -1 来作为流末尾,这个值不在 char 的取值范围内,所以不存在数据截断,然而 -1 又在 int 的取值范围内,同时 int 的取值范围包含 char 的取值范围,所以 FileReader 下 read 方法返回的 char 类型数据直接转为了 int 类型。
回复 使用道具 举报
import java.io.*;

class A{
        public static void main(String[] args)throws Exception{
                Writer w = new FileWriter("d:\\x.txt");
                //w.write(98);
                w.write(b);
                w.close();
               
                int a = 'b';
                System.out.println("a="+a);
                char b = 98;
                System.out.println("b="+b);
        }       
}
文件x.txt中写入的结果都是一样的,这两种数据类型之间是可以相互赋值,保存在文件中的都是以字符保存,相互赋值的时候应注意数据的局限,api中也明确说明了,要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。因为char数据类型占两个字节。
回复 使用道具 举报
int取值范围包含char取值范围。写入时哪种都一样
回复 使用道具 举报
第一,int的表示范围是-2^31------2^31-1,而char是0-----2^16,int包含char
第二,我们写入的时候他会去查ASCII表,97在表中对应的是a.
回复 使用道具 举报
int范围比char大,是为了通用性;你在write('a');和write(97)一样的;
回复 使用道具 举报
此题已经解决 thanks
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马