我有这段代码:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package askisi5;
import java.io.*;
/**
*
* @author Alexandros
*/
public class IO_Tester {
public static int readInt() {
byte b[] = new byte[16];
String str;
System.in.read(b);
str = (new String(b)).trim();
return Integer.parseInt(str);
}
}
在理解这段代码的过程中,我们创建了一个名为readInt()的函数,它返回一个整数。在这个函数中,我们创建了一个包含16个元素的字节数组,然后我们声明了一个String变量str。
下一行对我来说有点不清楚
System.in.read(B); - >我们是否从数组b输入数据到程序?
str =(new String(b))。trim(); - >似乎我们从String b修剪前导和尾随空格。 b转换为String。我们将结果保存到str
返回Integer.parseInt(str); - >我们完成类型转换后返回整数?
为什么当我编译这段代码时会出错? 错误:未报告的异常IOException;必须被抓住或宣布被抛出; System.in.read(B);
感谢
答案 0 :(得分:1)
我引用了java doc的方法。 Java是一种美妙的语言,几乎所有的API(至少来自核心语言)都有很好的文档记录。
System.in.read(b);
从输入流中读取一些字节并将其存储到 缓冲阵列b。实际读取的字节数返回为 整数。此方法将阻塞,直到输入数据可用,结束 检测到文件,或抛出异常。
如果b的长度为零,则不读取任何字节,返回0; 否则,尝试读取至少一个字节。如果没有字节 是可用的,因为流位于文件的末尾,即值 返回-1;否则,至少读取一个字节并存储到b中。
读取的第一个字节存储在元素b [0]中,下一个存入元素 b [1],等等。读取的字节数最多等于 b的长度。设k为实际读取的字节数;这些字节 将存储在元素b [0]到b [k-1]中,留下元素b [k] 通过b [b.length-1]不受影响。
类InputStream的read(b)方法具有与以下相同的效果:
read(b,0,b.length)参数:b数据所在的缓冲区 read.Returns:读入缓冲区的总字节数,如果是,则返回-1 没有更多的数据,因为流的结尾已经存在 到达.Throws:IOException - 如果无法读取任何第一个字节 如果输入流已经存在,则不是文件末尾的原因 关闭,或者如果发生其他一些I / O错误.NullPointerException - 如果b 是空的。
接下来是调用String对象的trim()
。 [new String(b)
只是通过使用平台的默认字符集解码指定的字节数组来创建一个新的String对象。
一个字符串,其值为此字符串,删除了任何前导和尾随空格,如果没有前导或尾随空格,则为此字符串。
接下来是Integer.parseInt(str)
如下所示。
由十进制参数表示的整数值。