关于Java中Enter键的疑问

关于Java中Enter的疑问

书中,在Java的标准输入输出流这一节中的一个例子后面说到:Java语言把Enter键当作两个字符"\r"和"\n",其在ASCII码中的值分别是13和10.

《Java程序设计基础(第6版)——陈国君》清华大学出版社 P186第5行

在这里插入图片描述

这是前面所说的例子是:P185【例10.4】
在这里插入图片描述

但是本人在将代码输入IDEA并运行时发现与书本不一致:

  • 先是和书上一样的代码:
import java.io.*;
public class app10_4 {
    public static void main(String[] args)
    {
        try {
            byte  [] b = new byte[128];          //设置缓冲区
            System.out.print("请输入字符:");
            int count =System.in.read(b);
            System.out.println("输入的是:");
            for (int i = 0 ; i < count ; i++)
                System.out.print(b[i]+" ");
            System.out.println();
            for (int i = 0 ; i < count-2; i++)
                System.out.print((char) b[i]+" ");
            System.out.println();
            System.out.println("输入的字符个数是:"+count);
            Class InClass = System.in.getClass();
            Class OutClass = System.out.getClass();
            System.out.println("in所在的类是"+InClass.toString());
            System.out.println("out所在的类是"+OutClass.toString());
        }
        catch (IOException e){}
    }
}

运行结果是:

请输入字符:abc
输入的是:
97 98 99 10
a b
输入的字符个数是:4
in所在的类是class java.io.BufferedInputStream
out所在的类是class java.io.PrintStream

  • 本人在第14行的for循环语句中进行改动:

     for (int i = 0 ; i < count-2; i++)
    

    改为

     for (int i = 0 ; i < count-1; i++)
    
  • 改后再次运行发现运行结果是:

请输入字符:abc
输入的是:
97 98 99 10
a b c
输入的字符个数是:4
in所在的类是class java.io.BufferedInputStream
out所在的类是class java.io.PrintStream

  • debug结果如下图:
    在这里插入图片描述
    在这里插入图片描述

可见在该程序中只读取了Enter键的"\n",ASCII码为10,而没有读到"\r"

但是在另一个程序中

该程序利用FileReader类读取文本内容。

import java.io.*;
public class app10_5 {
    public static void main(String[] args)
    {
        try(FileReader fr = new FileReader("D:/study/code/IOtest/Myfile.txt");)
        {
            char [] c =new char[13];
            int num =fr.read(c);//this read methods return the number of characters read
            String str = new String(c,0,num);
            System.out.println("文本中的字符有"+num+"个");
            System.out.println("文本中的内容是:"+str);
        }
        catch (FileNotFoundException e)
        {
            System.out.println("file not found");
        }
        catch (IOException e)
        {
            System.out.println("IOException");
        }
    }
}

当在文本中输入helloworld加Enter键时,输出结果为:

文本中的字符有12个
文本中的内容是:helloworld

debug结果如下图:
在这里插入图片描述

对比分析发现:前一个程序用的标准输入输出类System.in、System.out是InputStream、OutputStream的子类,属于字节流。而后一个程序用的FileReader间接继承自Reader类,属于字符流。

可能是当用字节流处理文本文件时,会出现各种各样的问题,所以Java建议在处理文本文件时使用字符流。

本人学识浅薄,查觉无人说此疑问,郁闷不解。

望各位指出其中真正正确的道理,感谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值