JAVA语言中read方法分析

在JAVA语言中,输入和输出功能依靠流来完成,输入输出流则 依靠InputStream和OutputStream两个类及其子类实现。lnputStream 类及其子类主要负责输入数据, 如果需要通过键盘输入数据. InputStream类巾的read方法是最常用的输入方法。许多学生学习过 程中产生迷惑, 以及出现问题也是在使用read ‘法输入数据时发生 的。 如果要使用read方法输入数据,应使用“System.in.read()”的形式。 在这个语句中,System是一个最终类,,不能用来产牛列象,它提供了 标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的 访问;加载文件和库的方法;快速复制数组的一部分的实用方法 in是 System类中一个InputStream类的对象.提供 输入数据的方法,最常 用的read方法有三个: read0:从输人流中读取数据的下一个字节。 read(byte[]b):从输入流中读取一定数量的字节,并将其存储在缓 冲区数组b中 read(byte[]b,int oK int len):将输入流中最多len个数据字节渎 入byte数组,从下标为off的元素开始存储。 ### JAVA语言中read方法分析 #### 一、概述 在JAVA语言中,输入与输出功能是通过流(stream)的概念来实现的。流是数据的一种有序集合,输入输出流主要依赖于`InputStream`和`OutputStream`两个核心类及它们的子类。其中,`InputStream`及其子类主要用于输入数据,例如通过键盘输入数据时,`InputStream`类中的`read`方法是最常见的选择。 #### 二、`read`方法详解 `read`方法作为`InputStream`类的核心方法之一,在JAVA中用于从输入流中读取数据。`InputStream`类中定义了三个版本的`read`方法: 1. **`read()`**:从输入流中读取下一个字节。 2. **`read(byte[] b)`**:从输入流中读取一定数量的字节,并将其存储在指定的字节数组`b`中。 3. **`read(byte[] b, int off, int len)`**:从输入流中读取最多`len`个字节,并将它们存储在指定的字节数组`b`中,从索引`off`开始。 这三个方法覆盖了不同场景下的数据读取需求。例如,当只需要读取单个字节时可以使用`read()`方法;当需要一次性读取多个字节并将它们存储到数组中时,则可以选择`read(byte[] b)`或`read(byte[] b, int off, int len)`。 #### 三、案例分析 假设我们要编写一个程序,该程序需要通过键盘接收两个整数,然后找出这两个整数之间的所有素数,并统计素数的数量。同时,还需要将计算结果输出到屏幕上并写入文本文件中。 下面是程序的部分代码示例: ```java byte[] A = new byte[10]; byte[] B = new byte[10]; String s1, s2; try { FileWriter fw = new FileWriter("捕捉结果.txt"); for (int m = 1; f == N; m++) { System.out.println("请输入第一个参数:"); System.in.read(A); s1 = new String(A); a = Long.parseLong(s1.trim()); System.out.println("\n请输入第二个参数:"); System.in.read(B); s2 = new String(B); b = Long.parseLong(s2.trim()); System.out.println("即将捕捉从 " + a + " 到 " + b + " 之间的素数!\n请确认参数输入是否有误 ^\n输入大写字母N可重新输入参数:"); f = (char) System.in.read(); } } catch (IOException e) { e.printStackTrace(); } ``` 该程序的设计意图是让用户能够根据需要重新输入参数,但是在实际运行中,当用户第一次输入结束并且输入大写字母"N"时,程序不会重新要求输入两个参数,而是跳过第一个参数的输入,直接要求输入第二个参数。 #### 四、问题原因及解决方案 问题的原因在于程序设计者对于`read`方法的理解不够深入。具体而言,`System.in.read()`方法读取的是单个字节,而当用户输入一系列字符时(如输入数字后按回车),实际上读取到的是包括数字在内的整个字符序列的首字节,通常为回车符。 **解决方案:** 1. **使用BufferedReader:** 使用`BufferedReader`类的`readLine()`方法可以更好地处理键盘输入。这种方法可以读取一整行输入,并且自动处理换行符,使得程序更加健壮。 ```java BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String input = reader.readLine(); // 读取一行输入 ``` 2. **优化程序逻辑:** 对于上述示例中的问题,可以通过修改程序逻辑来解决,确保每次循环都能重新输入两个参数。例如,可以设置一个标志位来控制是否需要重新输入,并在适当的位置重置这个标志位。 #### 五、结论 通过对JAVA语言中`InputStream`类的`read`方法进行详细分析,我们了解到在实际编程中正确使用这些方法的重要性。同时,通过具体的案例分析,我们也看到了如何避免常见陷阱以及如何优化程序逻辑以达到预期的效果。在JAVA编程中,理解并熟练运用这些基本概念对于编写高质量、可靠的程序至关重要。





















- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 软件配置管理规定.doc
- MiriaManager-机器人开发资源
- 文献管理软件EndNote使用方法.ppt
- Kotlin-Kotlin资源
- 基于PLC的传送带控制系统设计毕业设计.doc
- 市政道路施工项目管理策划书.doc
- 项目管理在财务统计分析系统建设中的应用.doc
- modelcontextprotocol_inspector-AI人工智能资源
- 2022年下午题网络工程师下午试题.docx
- 区块链与电商物流.ppt
- 可编程控制器PLC复习重点总结(可编辑修改word版).docx
- 交大计算机第六次作业.docx
- 面试算法培训讲座.ppt
- 通讯录管理系统数据库分析与设计说明书模板.docx
- 三菱plc控制步进电机编程.doc
- 智能优化计算遗传算法专家讲座.pptx



- 1
- 2
前往页